DynamoDB PutItem与UpdateItem的区别是什么?
DynamoDB PutItem与UpdateItem的区别是什么?
根据DynamoDb文档,为什么有人会使用updateItem
而不是putItem
?
PutItem
- 向表中写入一个单独的项。如果在表中存在相同主键的项,则操作将替换该项。对于计算预配置吞吐量消耗,项的大小为两者中的较大值。UpdateItem
- 修改表中的一个单独的项。DynamoDB将考虑修改之前和修改之后的项的大小。消耗的预置吞吐量反映了这两个项大小中的较大值。即使您只更新项的属性子集,UpdateItem
仍将消耗全部预配吞吐量(两者中的“之前”和“之后”项大小的较大值)。
admin 更改状态以发布 2023年5月24日
PutItem
会用传递的新版本覆盖整个项目(所有属性),而UpdateItem
只会更新传递的属性
性能:如果您经常覆盖整个项目,PutItem
的性能可能会受到影响,因为它涉及的操作比UpdateItem
FindItem、DeleteOldVersion和AddNewVersion更多
从成本的角度来看,它也是不同的:
AWS根据使用的读/写容量单位计算成本,这些容量单位完全与正在被覆盖/更新的项目的大小有关。
如果使用PutItem
,大小将是项目的新旧版本中较大的那个。例如,用一个1KB的2KB项目替换它,它将消耗2个WCUs,但随后的请求只会使用1个WCU。因此,如果您经常覆盖并且项目的大小发生巨大变化,它将始终计算项目的较大版本并影响成本。
对于使用UpdateItem
修改项目的情况,大小包括所有项目的现有属性,而不是像PutItem
那样较大的版本,但也不仅仅是要添加或更新的属性。
这两者之间的主要区别在于,PutItem
将 替换 整个项目,而UpdateItem
则将其 更新。
例如。
我有一个项:
userId = 1 Name= ABC Gender= Male
如果我使用 PutItem
标志它
UserId = 1 Country = India
这将替换Name和Gender,现在新的项目是UserId和Country。
如果您想将项目从 Name = ABC
更新到 Name = 123
,则必须使用 UpdateItem
。
您可以使用 PutItem
将项目更新,但您需要发送所有参数,而不仅仅是要更新的参数,因为它会将该项替换为新属性(在内部,它会删除该项并添加新项目)
希望这有意义。