Java DynamoDBMapper乐观锁定-我必须首先调用负载吗?
我正在尝试为我正在创建的应用程序使用乐观锁定。AWS网站上提到“使用乐观锁定,每个项都有一个充当版本号的属性。如果从表中检索项目,应用程序将记录该项目的版本号。您可以更新该项,但仅当服务器端的版本号未更改时。如果存在版本不匹配,则表示其他人在您之前已修改了该项。更新尝试失败,因为该项的版本已过时。“如果我更新对象时没有先调用load,那么如果发生版本不匹配,乐观锁定是否仍然有效?换句话说,乐观锁定是否必须调用load才能起作用 换句话说,乐观锁工作时调用加载是强制性的吗 事实并非如此,但一般来说,如果在尝试更新项目之前不加载该项目,您将很难使用乐观锁定 原因在于它的工作方式:当您发送一个用于乐观锁定的条件更新请求时,条件通常位于项目的Java DynamoDBMapper乐观锁定-我必须首先调用负载吗?,java,amazon-dynamodb,Java,Amazon Dynamodb,我正在尝试为我正在创建的应用程序使用乐观锁定。AWS网站上提到“使用乐观锁定,每个项都有一个充当版本号的属性。如果从表中检索项目,应用程序将记录该项目的版本号。您可以更新该项,但仅当服务器端的版本号未更改时。如果存在版本不匹配,则表示其他人在您之前已修改了该项。更新尝试失败,因为该项的版本已过时。“如果我更新对象时没有先调用load,那么如果发生版本不匹配,乐观锁定是否仍然有效?换句话说,乐观锁定是否必须调用load才能起作用 换句话说,乐观锁工作时调用加载是强制性的吗 事实并非如此,但一般来说
属性的值上,该属性也会在同一个更新请求中更新(通常增加1)
因此,为了使更新生效,您需要告诉DynamoDB该version
属性的值必须是什么
如果您在尝试发送条件更新请求以进行乐观锁定之前未加载该项,您如何知道当前版本是什么?如果您不知道该版本是什么,则通常无法期望条件更新请求正常工作
也就是说,在某些情况下,对某些请求不使用乐观锁定可能是有意义的
例如,假设您需要更改给定属性的值,并且项目状态中的任何内容都不会更改您的需求。在这种情况下,您不需要对此更新进行乐观锁定:您可以简单地告诉DynamoDB执行更新(同时增加version
属性!)。如果任何其他并发操作也未使用乐观锁定(即,未使用条件更新),则它们将成功;如果使用乐观锁定,则它们将失败