【问题标题】:Is dynamoDB' item available for querying immediately?dynamoDB 的项目是否可立即查询?
【发布时间】:2019-03-22 19:47:14
【问题描述】:

我使用 DynamoDBMapper.save 向 dynamoDB 表添加了一些项目。然后我立即查询了该项目。我一定会得到保存的项目吗?或者我应该在查询项目之前放置 thread.sleep() ?在 SQL 数据库中,我们使用事务,我们可以保证一旦将记录插入到 sql 表中,我们就会得到项目。但对于 dynamoDB,我不确定。查了AWS dynamodb文档,没有找到相关信息。

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    默认情况下,DynamoDB 读取最终是一致的。但是,DynamoDB 允许您使用 ConsistentRead 参数为读取操作指定高度一致的读取。它确实是有代价的,但强一致性读取占用的读取容量单位是其两倍。

    见:Read consistency in DynamoDB

    【讨论】:

    • 所以你的意思是,如果我们不指定 ConsistentRead=true 我们可能不会得到刚刚保存的项目?
    • 不,您确实有可能无法取回您期望的物品。在幕后,DynamoDB 可能包含许多需要同步的副本。这意味着您可以写入一个副本 A,并从另一个尚未与发生在 A 上的写入同步的副本 B 中读取。
    • 这意味着如果我们需要同步数据,我们可以: 1) 设置 ConsistentRead=true; 2)等待一段时间,例如几分钟,直到项目在所有副本中同步。
    • DynamoDB 不是一个最终一致的数据库。这只是阅读时的默认设置。您所说的关于副本的内容也不完全正确。 DynamoDB 仅在已持久写入至少两个可用区时才会确认。在几毫秒内,它将位于第三个 AZ。对于只有两个公共 AZ 的区域,实际上还有第三个非公共 AZ。因此,如果您没有指定强一致性读取并且您读取的项目少于复制,那么您可能会得到脏读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2018-04-04
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多