首页 > 解决方案 > DynamoDBMapper 有条件地保存对象列表

问题描述

我的用例:给定对象列表,保存 DynamoDB 表中尚不存在的所有对象(即,如果对象已存在具有相同的 has 和 range 键,则不要覆盖,而是忽略或抛出所有现有项目的异常)

我在 DynamoDBMapper 中有 2 个选项:

  1. 在串行或并行循环中,有条件地保存单个对象。

  2. 使用给定的哈希和范围键批量加载所有对象,比较自己并过滤掉现有对象并仅保存不存在的对象

您能否帮助我了解哪种方法在延迟和成本方面更好?

标签: amazon-web-servicesamazon-dynamodb

解决方案


第二种选择效率不高。当您不需要时,您会花费额外的 RCU 来读取项目,而且您正在使用额外的带宽、增加延迟并将更多的东西加载到应用程序内存中而不是您需要的。

最简单的选择是使用串行循环编写带有attribute_not_exists条件的项目(请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html#Expressions.ConditionExpressions.PreventingOverwrites。DynamoDB 非常快所以除非你有大量的物品要保存,否则你应该没问题。

您不能在 DynamoDB BatchWrite 操作上设置条件,因此如果您想要带条件的多线程写入,则必须自己编写。


推荐阅读