Amazon web services DynamoDB并发写入

Amazon web services DynamoDB并发写入,amazon-web-services,nosql,amazon-dynamodb,Amazon Web Services,Nosql,Amazon Dynamodb,我有一个现有的DynamoDB表,它的属性是 --------------------------------------------------------- hk(hash-key)| rk(range-key)| a1 | a2 | a3 | --------------------------------------------------------- ---------------------------------------------------

我有一个现有的DynamoDB表,它的属性是

--------------------------------------------------------- hk(hash-key)| rk(range-key)| a1 | a2 | a3 | --------------------------------------------------------- --------------------------------------------------------- hk(散列键)| rk(范围键)| a1 | a2 | a3 | ---------------------------------------------------------
我有一个现有的DynamoDb客户端,它只会更新a1的现有记录。我想创建第二个writer(DDB客户机),它也将更新现有记录,但仅适用于a2和a3
如果两个ddb客户端试图同时更新同一条记录(a1为1,a2和a3为另一条),DynamoDb是否会保证所有a1和a3都更新为正确的值(所有三个新值)?使用save behavior UPDATE\u SKIP\u NULL\u属性是否足以实现此目的,还是需要实现某种乐观锁定?如果没有,,
DDB是否为此提供了一些动态功能?

对DyanmoDB的读取最终是一致的。 见此:

DynamoDB支持最终一致和强一致读取

最终一致阅读

当您从DynamoDB表中读取数据时,响应可能不正确 反映最近完成的写入操作的结果。这个 响应可能包含一些过时的数据。如果你重复你的阅读 请求一段短时间后,响应应返回最新的 数据

强一致读取

当您请求强一致性读取时,DynamoDB返回 使用最新数据进行响应,反映来自 以前所有成功的写入操作。强一致性 如果存在网络延迟或中断,读取可能不可用

注:除非您指定,否则DynamoDB使用最终一致的读取 否则。读取操作(如GetItem、查询和扫描)提供 一致读取的参数。如果将此参数设置为true, DynamoDB在操作期间使用强一致性读取

基本上,您必须指定在读取时需要具有强一致性的数据

这应该能解决你的问题。通过一致读取,您应该可以看到所有三个字段的更新


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

如果您碰巧使用的是Dynamo Java SDK,那么您就很幸运了,因为SDK仅支持这一点。我不确定其他SDK是否支持类似的功能,我怀疑它们不支持

乐观锁定是一种确保客户端项目 您正在更新(或删除)的项目与中的项目相同 发电机ODB。如果您使用此策略,那么您的数据库写入 防止被其他人写入的内容覆盖-以及 反之亦然


我知道强一致性读取的吞吐量消耗。我只是想问,是否有可能与两位不同的作者同时在同一张唱片上创作,或者其中任何一位都会一次性成功,最终的唱片可能会是a'1 a2 a3或a1 a'2 a'3。希望我能解释我的疑问。谢谢,让我们看看乐观锁定是否是唯一的方法。我有类似的情况吗?我们真的需要在这里锁定吗?@Rahul遗憾的是,尽管由于优先级的改变,我早就离开了这项研究,但我仍然没有满意的答案:P