集成测试使用不一致读取的 DynamoDB 客户端?
Integration testing a DynamoDB client which uses inconsistent reads?
情况:
- 一个 web 服务 和一个 API 从 DynamoDB 读取记录。它使用最终一致性读取(
GetItem
默认模式)
- 集成测试由两个步骤组成:
- 在 DynamoDB 中创建测试数据
- 调用该服务以验证它是否返回预期结果
我担心由于数据的最终一致性,这个测试注定是脆弱的。
如果我尝试在使用 GetItem
withConsistenRead=true
写入后立即验证数据,它只能保证数据已写入 大多数数据库副本,但不是全部,因此被测服务在下一步中仍有机会从未更新的副本中读取。
有没有办法确保在继续之前数据已写入 所有 个 DynamoDB 副本?
数据通常在秒内到达所有地理分布的副本。
我的建议是等待(即 Java 术语睡眠几秒钟)几秒钟,然后调用 Web 服务应该会产生所需的结果。
将数据插入 DynamoDB 后 table,等待几秒钟再调用网络服务。
Eventually Consistent Reads (Default) – the eventual consistency
option maximizes your read throughput. However, an eventually
consistent read might not reflect the results of a recently completed
write. Consistency across all copies of data is usually reached within
a second. Repeating a read after a short time should return the
updated data.
情况:
- 一个 web 服务 和一个 API 从 DynamoDB 读取记录。它使用最终一致性读取(
GetItem
默认模式) - 集成测试由两个步骤组成:
- 在 DynamoDB 中创建测试数据
- 调用该服务以验证它是否返回预期结果
我担心由于数据的最终一致性,这个测试注定是脆弱的。
如果我尝试在使用 GetItem
withConsistenRead=true
写入后立即验证数据,它只能保证数据已写入 大多数数据库副本,但不是全部,因此被测服务在下一步中仍有机会从未更新的副本中读取。
有没有办法确保在继续之前数据已写入 所有 个 DynamoDB 副本?
数据通常在秒内到达所有地理分布的副本。
我的建议是等待(即 Java 术语睡眠几秒钟)几秒钟,然后调用 Web 服务应该会产生所需的结果。
将数据插入 DynamoDB 后 table,等待几秒钟再调用网络服务。
Eventually Consistent Reads (Default) – the eventual consistency option maximizes your read throughput. However, an eventually consistent read might not reflect the results of a recently completed write. Consistency across all copies of data is usually reached within a second. Repeating a read after a short time should return the updated data.