1

新しい DynamoDB テーブルをセットアップしようとしていますが、初めてローカル セカンダリ インデックス (LSI) を使用する予定です。

しかし、私はそれらを作成するのに苦労しています。Amazon API で、構成されたハッシュ キー (複数の属性から存在するハッシュ キー) を使用して LSI を作成する際の参照が見つかりません。

これは私のモデルがどのように見えるかであり、UserA から UserB に送信されるメッセージを表しています。

  • ユーザーID
  • ユーザー入札
  • 日付時刻
  • ステータス (1、2、3、4、5)
  • isPriority (0 または 1)
  • isNewsLetter (0 または 1)

私がやりたいクエリは次のとおりです

  1. 日付順に並べられた UserAId からのすべてのメッセージを取得する
  2. UserAId から UserBId へのすべてのメッセージを取得する
  3. dateTime 順で特定のステータス (1 または 2) を持つ UserAId からのすべてのメッセージを取得します
  4. 特定のステータス (1 または 2) を持つ UserAId からのすべてのメッセージを取得します。
  5. dateTime 順で UserAId からすべての優先度メッセージを取得する
  6. 特定のステータス (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 を使用するように定義するにはどうすればよいでしょうか。

  • 注文に関する私の仮定は正しいでしょうか?

前もって感謝します

4

1 に答える 1

1

いくつかの調査といくつかのテストを行った後、私は自分の質問に答えることができます。

質問 1) いいえ、キースキーマで合成範囲キーを定義することはできません。ただし、モデルクラスに別の属性を作成して、同じものを表すことができます

例: クエリ 3 の場合、新しい属性をモデルに追加し、属性 status と dateTime を自分でマージする必要があります。

質問 2) はい。ScanIndexForward を使用して、順序を DESC/ASC に変更することもできます

于 2013-11-01T09:15:52.077 に答える