DynamoDB并发写入

时间:2017-12-18 14:20:11

标签: amazon-web-services nosql amazon-dynamodb

我有一个现有的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是否有为此目的提供的东西?

2 个答案:

答案 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在操作期间使用强一致性读取。

基本上,您已指定在阅读时需要具有强一致性数据。

那应该可以解决你的问题。使用一致的读取,您应该看到所有三个字段的更新。

请注意,强烈一致性读取会对定价产生影响。