【问题标题】:What is the AWS Dynamo DB write consistence?什么是 AWS Dynamodb 写入一致性?
【发布时间】:2016-08-05 01:38:21
【问题描述】:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

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

    声称单个 PutItemDeleteItem 请求是原子的,这意味着对于可能想要修改同一项目(由其分区/排序键标识)的其他请求而言,每个请求都是原子的 - 意思项目内不可能发生数据损坏,因为两个 PutItem 请求同时执行,每个请求都会修改项目的某些部分,从而使其处于不一致状态。

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

    为了说明这一点,假设您有一个包含以下 2 个调用的 BatchItemRequest:

    • PutItem(partitionKey = 1000;名称 = 'Alpha';值 = 100)
    • 删除项目(partitionKey = 1000)

    大约在您提交此请求的同时,还有另一个请求包含以下操作:

    • 删除项目(partitionKey = 1000)

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

    【讨论】:

    • 谢谢,但是意思是原子等于同步?
    • @Cenxui atomic 通常指的是不能细分为更小的部分的东西。在计算机科学的上下文中,如果(至少在操作之外)它不能被分解成更小的部分并且没有可观察的中间状态,则该操作被称为原子操作。同步是另一回事,它可用于使操作原子化,但 atomicsynchronization 不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多