根据DynamoDb文档,为什么有人会使用updateItem
代替putItem
?
PutItem
- 将单个项目写入表格。如果表中存在具有相同主键的项,则该操作将替换该项。为了计算预配置的吞吐量消耗,重要的项目大小是两者中较大的一个。UpdateItem
- 修改表格中的单个项目。 DynamoDB会在更新之前和之后考虑项目的大小。消耗的预配置吞吐量反映了这些项目大小中的较大者。即使您只更新项目属性的子集,UpdateItem
仍将消耗全部预配置吞吐量(“之前”和“之后”项目大小中的较大者)。 / LI>
答案 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。