Open2

DynamoDBのputItemとupdateItemのニュアンスの違いをうまく説明したい

ふじしろふじしろ

個人的なイメージ

左辺: DynamoDB , 右辺: MySQL

  • putItem = insert x replace
  • updateItem = insert x update ( = upsert)

若干違ったので修正版

  • putItem = replace
  • updateItem = insert x update ( = upsert)
ふじしろふじしろ

ソースあつめ

​putItem = insert x replace

PutItem
PutItem 新しい項目を作成します。同じキーを持つ項目がテーブルにすでに存在する場合は、新しい項目に置き換えられます。

REPLACE ステートメント
REPLACE は、INSERT とまったく同じように機能します。ただし、テーブル内の古い行に、PRIMARY KEY または UNIQUE インデックスに関して新しい行と同じ値が含まれている場合、その古い行は新しい行が挿入される前に削除されます。

REPLACE INTO テーブル名 (カラム1, カラム2, ..., カラムN)
VALUES (値1, 値2, ..., 値N);

insert x replaceじゃなくて replace単独で担いそう

updateItem = insert x update

UpdateItem
指定されたキーを持つ項目が存在しない場合は、UpdateItem により新しい項目が作成されます。または、既存の項目の属性が変更されます。

https://dev.mysql.com/doc/refman/8.0/ja/insert-on-duplicate.html

INSERT ... ON DUPLICATE KEY UPDATE ステートメント
ON DUPLICATE KEY UPDATE 句を指定し、行を挿入すると、UNIQUE インデックスまたは PRIMARY KEY で値が重複する場合、古い行の UPDATE が発生します。

参考

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.WritingData

https://dev.mysql.com/doc/refman/8.0/ja/insert-on-duplicate.html
https://dev.mysql.com/doc/refman/8.0/ja/replace.html

https://tech.kurojica.com/archives/18949/