DynamoDB并发写入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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是否有为此目的提供的东西?
如果您碰巧使用Dynamo Java SDK,那么您很幸运,因为SDK仅支持使用Optimistic Locking。我不确定其他SDK是否支持类似的东西 - 我怀疑他们没有。
乐观锁定是一种策略,用于确保您正在更新(或删除)的客户端项目与DynamoDB中的项目相同。如果使用此策略,则会保护您的数据库写入不被其他人的写入覆盖 - 反之亦然。
对DynamoDB的读取最终是一致的。看到这个:qazxsw poi
DynamoDB最终支持一致且强一致的读取。
最终一致的阅读
从DynamoDB表读取数据时,响应可能不会反映最近完成的写入操作的结果。响应可能包括一些陈旧的数据。如果您在短时间后重复读取请求,则响应应返回最新数据。
非常一致的读取
当您请求强一致性读取时,DynamoDB会返回包含最新数据的响应,反映所有先前写入操作成功的更新。如果存在网络延迟或中断,则可能无法使用强一致性读取。
注意除非另行指定,否则DynamoDB最终使用一致读取。读取操作(如GetItem,Query和Scan)提供ConsistentRead参数。如果将此参数设置为true,则DynamoDB在操作期间使用强一致性读取。
基本上,您已指定在阅读时需要具有强一致性数据。
那应该可以解决你的问题。使用一致的读取,您应该看到所有三个字段的更新。
请注意,对于强一致性读取存在定价影响。
以上是关于DynamoDB并发写入的主要内容,如果未能解决你的问题,请参考以下文章