BatchPutItem 与 DynamoDB 中的 PutItem
BatchPutItem vs PutItem in DynamoDB
我有一个用例,在这个用例中,单个请求中有条目列表要更新的情况并不多,而且大多数情况下,只有一个条目被请求更新。但在未来,这可能会增长,因此我正在考虑使用 BatchPutItem 而不是 PutItem。
- 当请求中只有一个项目要更新时,使用 BatchPutItem 有什么缺点吗?
- 我认为消耗的 RCU 是相同的,但是否存在任何其他差异,或者当请求中只有一个条目时,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操作可以做的更多:
a stand-alone PutItem
操作可以是 条件 (仅当某些条件与先前的值匹配时才替换项目物品)。该操作还可以 return 项目的先前值,无需额外费用。
a stand-alone UpdateItem
操作可以做的更多:除了有条件和 returning 一个项目的先前值之外,这个操作还可以修改项目的属性 - 而不是完全替换它。这些修改甚至可以包括表达式 - 例如,增加属性 in-place.
这些附加功能无法通过 BatchWriteItem
获得。如果您需要任何这些功能,您将不得不直接使用 PutItem
或 UpdateItem
,并且无法使用 single-request BatchWriteItem
.
我有一个用例,在这个用例中,单个请求中有条目列表要更新的情况并不多,而且大多数情况下,只有一个条目被请求更新。但在未来,这可能会增长,因此我正在考虑使用 BatchPutItem 而不是 PutItem。
- 当请求中只有一个项目要更新时,使用 BatchPutItem 有什么缺点吗?
- 我认为消耗的 RCU 是相同的,但是否存在任何其他差异,或者当请求中只有一个条目时,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操作可以做的更多:
a stand-alone
PutItem
操作可以是 条件 (仅当某些条件与先前的值匹配时才替换项目物品)。该操作还可以 return 项目的先前值,无需额外费用。a stand-alone
UpdateItem
操作可以做的更多:除了有条件和 returning 一个项目的先前值之外,这个操作还可以修改项目的属性 - 而不是完全替换它。这些修改甚至可以包括表达式 - 例如,增加属性 in-place.
这些附加功能无法通过 BatchWriteItem
获得。如果您需要任何这些功能,您将不得不直接使用 PutItem
或 UpdateItem
,并且无法使用 single-request BatchWriteItem
.