>我有一个应用程序,它将事件附加到dynamodb table
,userid
作为哈希键,增量序列号作为范围键(以保证排序顺序)。表仅追加。假设编写器为用户 ID "1" 写入事件。我有一个阅读器,它使用带有用户 ID "1"哈希键的最后一个序列号读取事件。 如果读取器使用强一致性读取,我知道读取器将按顺序获取与写入顺序相同的数据。
如果读取器使用最终一致性读取,我可以期待相同的行为吗?
您不能期望相同的行为,即最后写入的项目可能无法用于最终一致性读取。
例如,假设您连续有 3 次写入:
userId=1, seqNumber=1
userId=1, seqNumber=2
userId=1, seqNumber=3
如果执行最终一致性读取,则不能保证获得所有项目。如果这是您插入项目的方式,则查询仍将按顺序返回项目。如果要获取所有最近的写入,则必须使用强一致性读取。
来自 DynamoDB 常见问题解答
。
最终一致性读取(默认)– 最终一致性 选项可最大化读取吞吐量。然而,最终 一致性读取可能无法反映最近完成的结果 写。所有数据副本之间的一致性通常在 一秒钟。在短时间后重复读取应返回 更新的数据
。