DynamoDB批量更新

use*_*749 17 amazon-dynamodb

在dynamodb中是否有任何api来更新批次的项目.有一个api可以批量编写新项目(BatchWriteItem)并使用UpdateItem更新单个项目.但是可以在一次通话中更新多个项目吗?

小智 25

我现在知道这是一个老问题,但 DynamoDB 最近添加了一个支持更新的事务 api:

更新 — 启动 UpdateItem 操作以编辑现有项目的属性或将新项目添加到表中(如果尚不存在)。使用此操作可以有条件地或无条件地添加、删除或更新现有项目的属性。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html

  • 这是可行的,但对于使用此功能的人来说,请注意交易成本是正常更新的两倍。 (2认同)

not*_*est 18

目前DynamoDB中没有可用的批量更新项API.

DynamoDB API操作列表

  • 2022 年 3 月:情况依然如此 (26认同)
  • 2021年12月:5年后,情况依然如此(不包括使用交易) (4认同)

ap1*_*p14 12

我通过类似的查询到达了这个线程,希望这可能有所帮助。

DynamoDB 支持批量语句执行,文档中对此进行了描述。这适用于客户端对象而不是资源对象。然后我使用了 DynamoDB 支持的 PartiQL 更新语句,并在此处进行了描述。

Python 代码参考看起来像这样:

client = boto3.client('dynamodb')

batch = ["UPDATE users SET active='N' WHERE email='<user_email>' RETURNING [ALL|MODIFIED] [NEW|OLD] *;", "UPDATE users ..."]  # Limit to 25 per batch
request_items = [{'Statement': _stat} for _stat in batch]
batch_response = client.batch_execute_statement(Statements=request_items)
Run Code Online (Sandbox Code Playgroud)

这是最少的代码。您可以使用多线程同时执行多个批处理。

  • 我想知道与逐一执行“update_item”相比,它的性能如何?2 倍加速?10 倍?慢点? (2认同)

小智 9

使用 PartiQL,您可以像 SQL 一样执行批量插入和更新。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.multiplestatements.batching.html

  • 通过额外的支持信息可以改进您的答案。请[编辑]添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以[在帮助中心](/help/how-to-answer)找到有关如何写出好的答案的更多信息。 (4认同)