DynamoDb PutItem与UpdateItem之间的区别?

Sin*_*dhu 45 amazon-dynamodb

基于DynamoDb文档,为什么有人会使用updateItem而不是putItem?

PutItem-将单个项目写入表格.如果表中存在具有相同主键的项,则该操作将替换该项.为了计算预配置的吞吐量消耗,重要的项目大小是两者中较大的一个.

UpdateItem-修改表中的单个项目.DynamoDB会在更新之前和之后考虑项目的大小.消耗的预配置吞吐量反映了这些项目大小中的较大者.即使您仅更新项目属性的子集,UpdateItem仍将消耗全部预配置吞吐量("之前"和"之后"项目大小中的较大者).

Har*_*ara 76

两者之间的主要区别是,PutItem将替换整个项目,而UpdateItem将更新它.

例如.

我有一个像这样的项目:

userId = 1
Name= ABC
Gender= Male
Run Code Online (Sandbox Code Playgroud)

如果我使用PUT项目

UserId = 1
Country = India
Run Code Online (Sandbox Code Playgroud)

这将取代名称和性别,现在新项目是UserId和Country.如果您想要更新项目,Name = ABC to Name = 123则必须使用UpdateItem

您可以使用Put项来更新它,但是您需要发送所有参数而不仅仅是要更新的参数,因为它用新属性替换项目.(在内部删除项目和添加新项目)

希望这是有道理的.

  • @AmirKarimi,基本上Put会在内部做3个操作FindKey->删除 - >添加和更新会做FindKey - >更新所以我觉得更新会更快 (4认同)
  • 关于使用“update”而不是“put”的性能影响的任何想法? (2认同)
  • 当没有找到项目时,您是否能够运行 UpdateItem 并且它会插入它? (2认同)

Muh*_*man 21

PutItem使用传递的新版本覆盖整个项目(所有属性),而UpdateItem只会更新传递的属性

性能PutItem如果您经常覆盖整个项目,可能会影响性能,因为它涉及的操作比UpdateItemFindItem、DeleteOldVersion 和 AddNewVersion 多

从成本的角度来看,它也有所不同:

AWS 根据使用的读/写容量单位计算成本,这些单位与被覆盖/更新的项目的大小完全相关。

在 的情况下PutItem,大小将是项目的新旧版本中较大的一个。例如,将 2 KB 的项目替换为 1 KB,它将消耗 2 个 WCU,但后续请求将仅使用 1 个 WCU。因此,如果您经常覆盖并且项目的大小变化很大,那么将始终计算项目的较大版本并影响成本。

在使用 修改项目的情况下UpdateItem,大小包括项目的所有预先存在的属性,而不是像PutItem:)这样的较大版本,而且不仅仅是正在添加或更新的属性:(