什么是AWS Dynamo DB写入一致性?

时间:2016-08-02 03:14:17

标签: amazon-web-services amazon-dynamodb

我知道AWS Dynamo DB读取最终具有强大的一致性。我读了一篇文件说The individual PutItem and DeleteItem operations specified in BatchWriteItem are atomic; however BatchWriteItem as a whole is not. 但我仍然不明白写方法行为是如何同步的。

如果这是一个尴尬的问题,请告诉我。

1 个答案:

答案 0 :(得分:2)

BatchWriteItem是一个批处理API - 这意味着它允许您指定要提交给Dynamo以在同一请求中执行的许多不同操作。因此,当您提交BatchItemRequest时,您要求DynamoDB为您执行许多PutItem或DeleteItem请求。

单个PutItemDeleteItem请求是原子的声明意味着每个请求都是原子的,可能想要修改同一个项目的其他请求(由它标识的&#39; s分区/排序键) - 意味着它不可能在项目中发生数据损坏,因为两个PutItem请求同时执行,每个请求修改项目的某些部分,从而将其留在不一致< / em>州。

但是,声称整个BatchWriteItem请求不是原子的。这只意味着PutItem和/或DeleteItem请求的序列不能保证是隔离的,因此您可以有其他PutItem或DeleteItem请求 - 无论是单个还是批处理与BatchWriteItem请求同时执行,这可能会影响状态组成批次的各个PutItem / DeleteItem请求之间的表。

为了说明这一点,我们假设你有一个由以下2个调用组成的BatchItemRequest:

  • PutItem(partitionKey = 1000; name =&#39; Alpha&#39 ;; value = 100)
  • DeleteItem(partitionKey = 1000)

并且在您提交此请求的同时,还有另一个请求,其中包含以下操作:

  • DeleteItem(partitionKey = 1000)

第二个删除项目请求可能会在第一个请求执行之前删除该项目,因此当PutItem成功时,第一个请求中的DeleteItem将因未找到而失败,因为该项目已被其他删除删除请求。这是整个批处理操作不是原子操作的一个示例。