私はハッシュとレンジキーのユニークな組み合わせを強制しようとしていましたが、この投稿に出会いました。私はそれが完全に私の質問に答えることはできませんでしたが、確かに正しい方向に私を指摘した。これは、緩い端を整える試みです。
DynamoDBは実際には設計上、ハッシュとレンジキーのユニークな組み合わせを強制しているようです。私は、「テーブル内のすべての項目は、主キー属性の値を持たなければならないとAmazon DynamoDBのは、その名の値が一意であることを保証し、」見出しの主キーを持つセクションの下http://aws.amazon.com/dynamodb/から
を
を引用します。
nodejsのaws-sdkでputItemを使用して私自身のテストでは、エラーを生成せずに2つの同一アイテムを投稿できました。データベースをチェックすると、実際には1つのアイテムしか挿入されませんでした。同じハッシュと範囲のキーの組み合わせでputItemを呼び出す2回目の呼び出しは、元のアイテムへの更新のように扱われるようです。
値が設定されたハッシュキーと範囲キーにexist = falseオプションを設定しようとしたときに、「属性が指定された値を持つことは期待できません」というエラーが表示されました。このエラーを解決するには、予想されるハッシュと範囲キーの下の値を削除し、同じキーを2回挿入しようとしたときに検証エラーを生成し始めました。
だから、私のinsertコマンドは次のようになります(Java用の異なるもの、うまくいけばあなたのアイデアを得るでしょう)
{ "TableName": "MyTableName",
"Item" : {
"HashKeyFieldName": {
"S": HashKeyValue
},
"RangeKeyFieldName": {
"N": currentTime.getTime().toString()
},
"OtherField": {
"N": "61404032632"
}
},
"Expected": {
"HashKeyFieldName" : { "Exists" : false},
"RangeKeyFieldName" : { "Exists" : false}
}
}
もともと私がチェックするために、条件付きの挿入を行うにしようとしていたのに対し私が挿入しようとしていたものと同じハッシュ値と範囲値があったら、今はHashFieldとRangeFieldが存在するかどうかを確認するだけです。それらが存在する場合は、挿入するのではなくアイテムを更新していることを意味します。
本当に古い質問ですが、dynamodbには原子インクリメントのバージョンがあります(これは主にここで人が巻き込まれている人向けです) –
原子的更新ドキュメントはこちら:http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/ API_UpdateItem.html – Deemoe