ハッシュ キーと範囲キーの一意の組み合わせを強制しようとしていたところ、この投稿に出会いました。私の質問に完全には答えていないことがわかりましたが、確かに正しい方向に向けてくれました。これは、ルーズエンドを整理する試みです。
DynamoDB は実際には、ハッシュと範囲キーの一意の組み合わせを設計により強制しているようです。引用します
「テーブル内のすべてのアイテムには主キー属性の値が必要であり、Amazon DynamoDB はその名前の値が一意であることを保証します」
http://aws.amazon.com/dynamodb/の [Primary Key] という見出しのセクションから。
nodejs の aws-sdk で putItem を使用した私自身のテストでは、エラーを生成することなく 2 つの同一のアイテムを投稿できました。データベースを確認したところ、実際に挿入されたアイテムは 1 つだけでした。同じハッシュと範囲キーの組み合わせを使用した putItem の 2 回目の呼び出しは、元のアイテムへの更新のように扱われるようです。
値が設定されたハッシュキーと範囲キーにexist = falseオプションを設定しようとすると、「属性に指定された値が存在することは期待できません」というエラーが表示されました。このエラーを解決するために、予想されるハッシュと範囲キーの下の値を削除しました。同じキーを 2 回挿入しようとすると、検証エラーが発生し始めました。
したがって、挿入コマンドは次のようになります (Java の場合は異なりますが、理解していただければ幸いです)。
{ "TableName": "MyTableName",
"Item" : {
"HashKeyFieldName": {
"S": HashKeyValue
},
"RangeKeyFieldName": {
"N": currentTime.getTime().toString()
},
"OtherField": {
"N": "61404032632"
}
},
"Expected": {
"HashKeyFieldName" : { "Exists" : false},
"RangeKeyFieldName" : { "Exists" : false}
}
}
元々、挿入しようとしていたものと同じハッシュ値と範囲値があるかどうかを確認するために条件付き挿入を実行しようとしていましたが、今は HashField と RangeField が存在するかどうかを確認するだけです。それらが存在する場合、それはアイテムを挿入するのではなく更新していることを意味します。