BatchPutItem 与 DynamoDB 中的 PutItem

BatchPutItem vs PutItem in DynamoDB

我有一个用例,在这个用例中,单个请求中有条目列表要更新的情况并不多,而且大多数情况下,只有一个条目被请求更新。但在未来,这可能会增长,因此我正在考虑使用 BatchPutItem 而不是 PutItem。

从货币成本的角度来看,这应该无关紧要 - 消耗的 WCU 是相同的。批处理 API 的好处是通过线路传输的请求更少,从而减少了写入多个项目的总体延迟。

两个 API 的错误处理不同,处理 BatchPutItem 需要一些额外的复杂性。即使 BatchPutItem 请求成功,个别项目写入也可能失败,您需要检查 response from the API 并重试并自行写入失败。

常规 PutItem 会在 more straightforward way 中通过返回错误/引发异常而失败。

这只是需要牢记的一点,如果您无论如何要使用 BatchWriteItem,无论如何都必须为此构建逻辑,这不会是一个缺点。

tl;dr: 对单个项目使用 BatchWriteItem 在您的情况下应该没有任何缺点,因为无论如何您都必须构建重试逻辑。

Maurice 的回答已经涵盖了 single-operation BatchWriteItem(原文如此)和独立 PutItem 之间的大部分 non-differences。但是您应该知道,这些操作的功能之间也存在差异:

BatchWriteItem 可以对项目执行的操作非常有限 - 您可以删除一个项目,或者完全替换它,仅此而已。

相比之下,stand-alone操作可以做的更多:

  1. a stand-alone PutItem 操作可以是 条件 (仅当某些条件与先前的值匹配时才替换项目物品)。该操作还可以 return 项目的先前值,无需额外费用。

  2. a stand-alone UpdateItem 操作可以做的更多:除了有条件和 returning 一个项目的先前值之外,这个操作还可以修改项目的属性 - 而不是完全替换它。这些修改甚至可以包括表达式 - 例如,增加属性 in-place.

这些附加功能无法通过 BatchWriteItem 获得。如果您需要任何这些功能,您将不得不直接使用 PutItemUpdateItem,并且无法使用 single-request BatchWriteItem.