我有一个现有的DynamoDB表,其属性为
--------------------------------------------------------- hk(hash-key)| rk(range-key)| a1 | a2 | a3 | ---------------------------------------------------------
我有一个现有的DynamoDb客户端,它只会更新a1的现有记录。我想创建第二个编写器(DDB客户端),它也将更新现有记录,但仅限于a2和a3。
如果ddb客户端同时尝试更新同一记录(a1为1,a2和a3为1),DynamoDb将保证所有a1 a2 a3都使用正确的值更新(所有三个新值) ?使用保存行为UPDATE_SKIP_NULL_ATTRIBUTES是否足以达到此目的,还是需要实现某种乐观锁定?如果不,
DDB是否有为此目的提供的东西?
答案 0 :(得分:0)
如果您正好使用Dynamo Java SDK,那么您很幸运,因为SDK仅支持Optimistic Locking。我不确定其他SDK是否支持类似的东西 - 我怀疑它们不支持。
乐观锁定是一种确保客户端项目的策略 您正在更新(或删除)的内容与中的项目相同 DynamoDB。如果您使用此策略,那么您的数据库写入是 防止被别人的写入覆盖 - 和 反之亦然。
答案 1 :(得分:-1)
对DyanmoDB的读取最终是一致的。 请参阅:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html
DynamoDB最终支持一致且强一致的读取。
最终一致的阅读
当您从DynamoDB表中读取数据时,响应可能不会 反映最近完成的写操作的结果。该 响应可能包括一些陈旧的数据。如果你重复阅读 请求在短时间后,响应应该返回最新的 数据
非常一致的阅读
当您请求强一致性读取时,DynamoDB会返回一个 响应最新数据,反映来自的更新 所有先前的写操作都是成功的。非常一致 如果出现网络延迟或中断,则可能无法读取。
注意除非您指定,否则DynamoDB最终会使用一致的读取 除此以外。提供读取操作(如GetItem,Query和Scan) ConsistentRead参数。如果将此参数设置为true, DynamoDB在操作期间使用强一致性读取。
基本上,您已指定在阅读时需要具有强一致性数据。
那应该可以解决你的问题。使用一致的读取,您应该看到所有三个字段的更新。
请注意,强烈一致性读取会对定价产生影响。