新しい DynamoDB テーブルをセットアップしようとしていますが、初めてローカル セカンダリ インデックス (LSI) を使用する予定です。
しかし、私はそれらを作成するのに苦労しています。Amazon API で、構成されたハッシュ キー (複数の属性から存在するハッシュ キー) を使用して LSI を作成する際の参照が見つかりません。
これは私のモデルがどのように見えるかであり、UserA から UserB に送信されるメッセージを表しています。
- ユーザーID
- ユーザー入札
- 日付時刻
- ステータス (1、2、3、4、5)
- isPriority (0 または 1)
- isNewsLetter (0 または 1)
私がやりたいクエリは次のとおりです
- 日付順に並べられた UserAId からのすべてのメッセージを取得する
- UserAId から UserBId へのすべてのメッセージを取得する
- dateTime 順で特定のステータス (1 または 2) を持つ UserAId からのすべてのメッセージを取得します
- 特定のステータス (1 または 2) を持つ UserAId からのすべてのメッセージを取得します。
- dateTime 順で UserAId からすべての優先度メッセージを取得する
- 特定のステータス (1 または 2) の UserAId からすべてのメッセージを取得し、isNewsLetter = 1 をステータス順に並べます
UserAId を選択した hashKey の場合、Range キーは dateTIme です。これは、最も実行する必要があるクエリ (クエリ 1) をカバーし、データを均等に分散させる必要があります。
他のクエリについては、次のLSIを考えていました
- クエリ 2: ハッシュ UserAId、範囲 UserBId
- クエリ 3: ハッシュ UserAId、範囲 (構成) status-dateTime。このようにして、BEGINS_WITH 1 AND BEGINS_WITH 2 でクエリを実行できます。日付順は自動である必要があると思います
- クエリ 4: 上記と同じ
- クエリ 5: ハッシュ UserAId、範囲 (構成) isPriority-dateTime。クエリ BEGINS_WITH 1、注文は自動になるはずです。
- クエリ 6: ハッシュ UserAId、範囲 (構成) status-isNewsLetter。このように、ステータスに従って注文する必要があります
私の質問は次のとおりです。
- LSIで合成鍵を使用することはできますか? それらをどのように定義しますか?これについては、Amazon が提供するドキュメントには何もありません。これは、通常の LSI を定義する方法です。
'KeySchema' => array( array('AttributeName' => 'UserAId', 'KeyType' => 'HASH'), array('AttributeName' => 'status', 'KeyType' => 'RANGE'), ),
では、たとえば status-isNesLetter を使用するように定義するにはどうすればよいでしょうか。
- 注文に関する私の仮定は正しいでしょうか?
前もって感謝します