已更新
下面的原始问题-修改后的问题是这样:
在下面忽略我的用例,可以使用dynamo进行老式的悲观锁,从而锁定整个项目以进行并发访问,直到我完成它为止?
按标题快速提问-我所有的谷歌搜索只显示了乐观锁定的说法。
是否想知道是否可以简单地进行“选择更新”?
用例需要先阅读,然后才能更新修改后的版本。最好进行一次读取和一次写入,而不是乐观策略所需的两次读取和一次写入。
谢谢。
答案 0 :(得分:1)
在Java SDK中,“项”的锁定是作为客户端扩展提供的,您需要做一些工作才能真正使用它。
这样做的原因是dynamo DB的分布式特性。请注意,该锁不是“服务器端”上的经典“基于行”的锁。客户端必须使用相关的“项目”来遵守锁。
用于管理锁的客户端类称为“ AmazonDynamoDBLockClient”。 如果您搜索此类,则会从Amazon SDK开发人员那里找到使用该类的示例。
与此相关的事情:
从这样的示例中摘录:
//build a lock client. any other client _not_ using this _same_ lock
//can still modify the data! this is not 'safe' in this regard!
final AmazonDynamoDBLockClient client = new AmazonDynamoDBLockClient(
AmazonDynamoDBLockClientOptions.builder(dynamoDB, "customLockTable")
.withTimeUnit(TimeUnit.SECONDS)
.withLeaseDuration(100L)
.withHeartbeatPeriod(40L)
.withCreateHeartbeatBackgroundThread(createHeartbeatBackgroundThread)
.build());
//try to acquire a lock on the partition key "FirstPart"
//of course this can fail, since someone else could have the lock
final Optional<LockItem> lockItem =
client.tryAcquireLock(AcquireLockOptions.builder("FirstPart").build());
要使上述代码正常工作,您需要创建一个特定的“ customLockTable”,这自然不是数据库后端的一部分。因此,以上示例不完整!