由于GSI(dynamoDB),编写Java集成测试时面临问题

yftpprvb  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(142)

我在中有一个dynamo表,我在其中配置了一个全局辅助索引。

tripID -> Partition Key
userId -> Range Key
dateScheduledAt -> Partition Key of the GSI
timeScheduledAt -> Range Key of the GSI

我在代码中编写了一个方法,它查询索引并获取相应的记录。
在编写IT来测试此特性时,我创建了dynamoDB的本地示例。

  • 场景I的第一步是在表中添加值
  • 在第二步中,调用方法以基于查询提取值。

它返回了一个空数组,当我应用验证时,我的测试失败了。似乎即使在表中创建了值,它也没有出现在GSI中(我在步骤2之前通过直接查询表进行了检查)
我在第1步和第2步(Thread.sleep())之前添加了5分钟的延迟,这一次,相同的方法返回了正确的响应,我的测试通过了。
在我看来,这是因为GSI不能保证系统中的一致性。但是,随着测试数量的增加,我目前使用的方法并不是一个可伸缩的解决方案。当涉及到GSI时,有人有更好的解决方案来编写测试吗?

vlf7wbxs

vlf7wbxs1#

DynamoDB到全局辅助索引的复制是异步的,可能需要几毫秒才能收敛。必须在测试用例中处理此最终一致性,因为GSI不会提供强读写一致性。

相关问题