DynamoDB中的BatchPutItem和PutItem有什么区别?

5

我有一个使用情况,其中我们不会得到那么多包含单个请求中的条目列表的情况需要更新,大多数情况下,仅请求更新单个条目。但是未来可能会增加,因此我考虑使用BatchPutItem而不是PutItem。

  • 如果请求中只有一个要更新的项,使用BatchPutItem有什么缺点吗?
  • 我认为消耗的RCU相同,但是是否存在其他差异,或者在请求中只有单个条目时,BatchPutItem将和PutItem表现相同?
2个回答

6
Maurice已经涵盖了单次操作BatchWriteItem和独立的PutItem之间的大部分非差异。但你应该知道这些操作的能力也有所不同: BatchWriteItem对项目的操作非常有限-您可以删除项目或完全替换它,但仅此而已。
相反,独立的操作可以做更多内容:
1. 独立的PutItem操作可以是条件性的(仅当某些条件匹配项目的先前值时才替换该项)。该操作还可以无需额外成本返回项目的先前值。
2. 独立的UpdateItem操作甚至可以做更多:除了具有条件性并返回项目的先前值外,此操作还可以修改项目的属性-而不必完全替换它。这些修改甚至可以包括表达式-例如,在原地增加属性。
这些附加功能在BatchWriteItem中不可用。如果需要其中任何一项功能,则必须直接使用PutItemUpdateItem,而不能使用单个请求的BatchWriteItem

1
PutItem 的优点很好,我忘了在 BatchWriteItem 中无法添加条件。 - Maurice

5
从货币成本的角度来看,这并不重要 - 消耗的 WCUs 是相同的。Batch API 的好处在于,较少的请求通过网络传输,从而减少编写多个项目的总延迟。
这两个 API 的错误处理方式不同,并且需要一些额外的复杂性来处理 BatchPutItem。即使 BatchPutItem 请求成功,单个项目的写入也可能失败,您需要检查API响应并自行重试和失败的写入。
常规 PutItem 将通过返回错误 / 引发异常的方式更加简单地失败。
这只是需要记住的一点,如果你打算使用 BatchWriteItem,无论如何都必须为此构建逻辑,并且这不会是一个缺点。 tl;dr: 在您的情况下,使用BatchWriteItem处理单个项目不应该有任何缺点,因为您仍然需要构建重试逻辑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接