DynamoDb PutItem 与 UpdateItem 的区别?

根据 DynamoDb 文档,为什么会有人使用 updateItem而不是 putItem


  • PutItem-将单个项写入表中。如果表中存在具有相同主键的项,则操作将替换该项。对于计算配置的吞吐量消耗,关键的项目大小是两者中较大的一个。
  • 修改表中的单个项。DynamoDB 考虑项目在更新前后的大小。所消耗的准备吞吐量反映了这些项目中较大的一个。即使只更新项目属性的一个子集,UpdateItem仍然会消耗所有的预备吞吐量(较大的“之前”和“之后”项目的大小)。
71862 次浏览

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

艾格。

我有一样东西:

userId = 1
Name= ABC
Gender= Male

如果我使用 PutItem项目与

UserId = 1
Country = India

这将替换 Name 和 Sex,现在新的 Item 是 UserId 和 Country。 而如果你想更新一个项目从 Name = ABCName = 123你必须使用 UpdateItem

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

希望这能说得通。

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

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

从成本角度来看,情况也有所不同:

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

PutItem的情况下,大小将是该项目的新版本和旧版本中较大的。例如,将一个2 KB 的项目替换为1 KB,它将使用2个 WCU,但是后续的请求将只使用1个 WCU。因此,如果你经常重写和项目的大小变化很大,这将总是计算较大的版本的项目,并影响成本。

如果使用 UpdateItem修改项目,大小包括项目的所有预先存在的属性,而不是较大的版本,如 PutItem:) ,但也不只是那些正在添加或更新: (

在上面的答案中稍微修正了一下: 即使是更新项 API 也考虑了两个项目大小(更新前和更新后)中较大的一个。请参阅文档 给你