DynamoDB 中的 BatchPutItem 与 PutItem

Gop*_*K S 6 performance latency amazon-web-services throughput amazon-dynamodb

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

  • 当请求中只有一个项目需要更新时,使用 BatchPutItem 是否有任何缺点?
  • 我认为消耗的 RCU 是相同的,但是是否有任何其他差异,或者当请求中只有一个条目时,BatchPutItem 的行为与 PutItem 相同?

Nad*_*'El 7

莫里斯的答案已经涵盖了单一操作BatchWriteItem(原文如此)和独立PutItem. 但您应该意识到这些操作的功能之间也存在差异:

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

相比之下,单机操作可以做更多的事情:

  1. 独立PutItem操作可以是有条件的(仅当某些条件与项目的先前值匹配时才替换该项目)。该操作还可以返回该项目的先前值,无需额外费用。

  2. 独立UpdateItem操作可以做更多事情:除了有条件并返回项目的先前值之外,此操作还可以修改项目的属性 - 而不是完全替换它。这些修改甚至可以包括表达式 - 例如,就地增加属性。

这些附加功能无法通过BatchWriteItem. 如果您需要任何这些功能,则必须直接使用PutItemUpdateItem,并且无法使用单个请求BatchWriteItem

  • 关于 PutItem 的好点,我忘记了您不能在 BatchWriteItem 中添加条件。 (2认同)

Mau*_*ice 5

从货币成本的角度来看,这应该不重要 - 消耗的 WCU 是相同的。Batch API 的优点是通过网络传输的请求更少,从而减少了写入多个项目的总体延迟。

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

常规程序PutItem会通过返回错误/引发异常以更直接的方式失败。

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

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