DynamoDb PutItem与UpdateItem之间的区别?

时间:2017-04-27 20:20:38

标签: amazon-dynamodb

根据DynamoDb文档,为什么有人会使用updateItem代替putItem

  • PutItem - 将单个项目写入表格。如果表中存在具有相同主键的项,则该操作将替换该项。为了计算预配置的吞吐量消耗,重要的项目大小是两者中较大的一个。
  • UpdateItem - 修改表格中的单个项目。 DynamoDB会在更新之前和之后考虑项目的大小。消耗的预配置吞吐量反映了这些项目大小中的较大者。即使您只更新项目属性的子集,UpdateItem仍将消耗全部预配置吞吐量(“之前”和“之后”项目大小中的较大者)。 / LI>

3 个答案:

答案 0 :(得分:58)

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

例如

我有一个像:

这样的项目
userId = 1
Name= ABC
Gender= Male

如果我使用PUT项目

UserId = 1
Country = India

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

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

希望这是有道理的。

答案 1 :(得分:1)

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

性能:如果您多次覆盖整个项目,则PutItem可能会影响性能,因为它涉及的操作比UpdateItem FindItem,DeleteOldVersion和AddNewVersion

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

AWS根据使用的读/写容量单位(与要覆盖/更新的项目的大小完全相关)来计算成本。

PutItem的情况下,大小将为该项目的新旧版本中的较大者。例如,将2 KB项目替换为1 KB,它将消耗2个WCU,但是后续请求将仅使用1个WCU。因此,如果您经常覆写,并且商品的尺寸变化很大,则总是会计算出商品的较大版本并影响成本。

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

答案 2 :(得分:0)

在上述答案中稍作修正:即使更新项目API也会考虑两个项目大小(更新前和更新后)中较大的一个。请参阅文档here