集成测试使用不一致读取的DynamoDB客户端?

时间:2017-02-10 05:35:57

标签: amazon-dynamodb eventual-consistency

情况:

  1. Web服务,其中包含用于从DynamoDB读取记录的API。它使用最终一致的读取(GetItem默认模式)
  2. 集成测试,包含两个步骤:
    • 在DynamoDB中创建测试数据
    • 调用服务以验证它是否返回了预期结果
  3. 我担心由于数据的最终一致性,这个测试必然是脆弱的。

    如果我在使用GetItem withConsistenRead=true写入后立即尝试验证数据,则只能保证数据已写入大多数数据库副本,但不是全部,因此被测服务仍有机会在下一步中读取未更新的副本。

    在继续操作之前,有没有办法确保数据已写入所有 DynamoDB副本?

1 个答案:

答案 0 :(得分:1)

数据通常以的形式到达所有地理位置分散的副本。

我的建议是在调用Web服务之前等待(即以Java术语休眠几秒钟)几秒钟才能产生所需的结果。

将数据插入DynamoDB表后,请等待几秒钟再调用Web服务。

  

最终一致性读取(默认) - 最终一致性   选项可最大化您的读取吞吐量。然而,最终   一致阅读可能无法反映最近完成的结果   写。通常在所有数据副本中达成一致性   一秒。在短时间后重复读取应该返回   更新数据。