我的用例:给定对象列表,保存DynamoDB表中不存在的所有对象(即,如果一个对象已经具有相同的has和range键,则不要覆盖所有对象,而忽略或抛出异常)现有项目)
DynamoDBMapper中有2个选项:
在串行或并行循环中有条件地保存单个对象。
使用给定的哈希键和范围键批量加载所有对象,进行自我比较并筛选出现有对象,并仅保存不存在的对象
能否请您帮助我了解哪种方法在延迟和成本方面更好?
答案 0 :(得分:1)
第二个选项效率不高。您将在不需要时花费额外的RCU来读取项目,此外,您还使用了额外的带宽,增加了延迟,并且将多余的内容加载到应用程序内存中。
最简单的选择是串行循环,以写入带有attribute_not_exists
条件的项(请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html#Expressions.ConditionExpressions.PreventingOverwrites。DynamoDB的速度非常快,因此除非您有大量要保存的项,否则应该可以那个。
您不能在DynamoDB BatchWrite操作上放置条件,因此,如果要对带有条件的多线程写入,则必须自己编写。