DynamoDb のドキュメントによると、なぜ putItem
ではなく updateItem
を使うのでしょうか?
PutItem
- テーブルに1つのアイテムを書き込みます。同じプライマリキーを持つアイテムがテーブルに存在する場合、この操作はそのアイテムを置き換えます。プロビジョニングされたスループットの消費量を計算するために、重要なアイテムサイズは2つのうち大きい方になります。UpdateItem
- テーブルの中の1つのアイテムを変更します。DynamoDBは、更新前と更新後のアイテムのサイズを考慮します。消費されるプロビジョニングスループットは、これらのアイテムサイズのうち大きい方を反映します。たとえアイテムの属性のサブセットを更新したとしても、UpdateItem
はプロビジョニングされたスループットを完全に消費します (_quot;before" and "after" item sizes_のうち大きい方)。両者の主な違いは、PutItemはアイテム全体を置換するのに対し、UpdateItemはアイテムを更新することです。
例
こんなアイテムがあります。
userId = 1
Name= ABC
Gender= Male
PUTアイテムに
UserId = 1
Country = India
この場合、NameとGenderが置き換えられ、新しいItemはUserIdとCountryになります。 一方、「Name = ABC」から「Name = 123」に更新したい場合は、UpdateItemを使用する必要があります。
アイテムを更新するためにPut itemを使用することもできますが、アイテムを新しい属性で置き換えるため、更新したいパラメータだけでなく、すべてのパラメータを送信する必要があります(内部的には、アイテムを削除して新しいアイテムを追加します)。
これで理解できたでしょうか?
PutItemはアイテム全体 (すべての属性) を新しいバージョンで上書きし、
UpdateItem` は渡された属性のみを 更新 します。
パフォーマンス:PutItemは
UpdateItem` の FindItem, DeleteOldVersion, AddNewVersion よりも多くの操作を含むため、アイテム全体を頻繁に上書きすると、パフォーマンスに影響を与える可能性があります。
**コスト面でも異なります。
AWSは、上書き/更新されるアイテムのサイズに完全に関連する使用済みの読み取り/書き込みの容量単位に基づいてコストを計算します。
PutItem`の場合、サイズはアイテムの新しいバージョンと古いバージョンの大きい方になります。例えば、2KBのアイテムを1KBに置き換える場合、2WCUを消費しますが、それ以降のリクエストでは1WCUしか使用しません。したがって、頻繁に上書きしてアイテムのサイズが大きく変わる場合、常に大きなバージョンのアイテムを計算し、コストに影響します。
UpdateItemを使ってアイテムを変更する場合、サイズは
PutItem` のような大きいバージョンではなく、アイテムの既存のすべての属性を含みます :) また、追加または更新される属性だけではありません :()