0

メッセージングシステムのdynamodbmessage_tblのように名前が付けられたテーブルがあります。

特定のconversation_idに関連するすべてのメッセージ項目を取得する目的で、次のようにテーブルを設計しました。

属性は次のとおりです。

プライマリ ハッシュ キー=>conversation_id

プライマリソートキー=>date_time

その他の属性=> sender_idmessage

conversation_id date_time sender_id message 123456 2016-12-27 06:00:39 pm 10 hai how are you..? 123456 2016-12-27 06:01:00 pm 11 I am fine 123456 2016-12-27 06:01:12 pm 10 ok 123456 2016-12-27 06:01:12 pm 14 Hai man. How are you.?

=> 10 & 14 によって同時に送信される最後の 2 つのエントリは、正しく発生する可能性があります。sender_idその場合、 は属性値を同じ主キーに置き換え、データの損失が発生します。一意のランダムな 6 桁の文字列をセカンダリ ローカル インデックスとして使用しますか?

セカンダリインデックスをソートキー(一意のランダム文字列)として設定すると、同じconversation_idとdate_timeでアイテムをdbに入れても受け入れられます.? 私が間違っている場合は、テーブルを設計するように処方してください。

注: PHP Codeigniter MVC フレームワークを使用しています。

4

2 に答える 2

1

はい。DynamoDB を使用するとHash Key、次の 2 つのメッセージが表示されます。conversation_idSort Keydate_time

conversation_id date_time sender_id message 123456 2016-12-27 06:01:12 pm 10 ok 123456 2016-12-27 06:01:12 pm 14 Hai man. How are you.?

最後のメッセージで上書きされます。

あなたができることは、message_id. これは基本的に、すでに . として考えていた一意のランダム文字列ですSort Key。したがって、これは上書きされません。

conversation_id message_id date_time sender_id message 123456 1123 2016-12-27 06:01:12 pm 10 ok 123456 3213 2016-12-27 06:01:12 pm 14 Hai man

次に、以前のように でクエリしconversation_idて並べ替えたい場合は、 Local Secondary Indexを作成できます。date_time

于 2017-01-06T20:34:47.780 に答える