2016-08-09 25 views
1

私はテーブルを有するスレッド ID(数)、last_message(数)とIS_VALID(番号)を有します。DynamoDBの:並べ替えおよびフィルタリングインデックス

is_valid = 1と並べ替えてlast_message asc(またはdesc)とソートした結果を得たいと思います。

idをパーティションキー(ハッシュ)、is_validをソートキーとして設定し、パーティションキーがis_validでソートキーがlast_messageの "lastMessageValidIndex"という名前のグローバルセカンダリインデックスを作成しましたが、動作しません。

ありがとうございました。

答えて

0

lastMessageValidIndexを照会する必要があります。 is_valid = 1のクエリがあり、結果が得られるはずですlast_message

+0

IndexNameをlastMessageValidIndexに設定しようとしましたが、順序は変更されませんでした。構造とクエリの例がありますか? – Grork

+0

セカンダリインデックスの名前は重要ではありません。セカンダリインデックスを照会するだけで済みます。 dynamodbは結果をあなたのために並べ替えます。結果が得られればあなたの質問はOKですが、あなたのインデックススキームが間違っているかもしれません。 –

+0

このような理由で私は尋ねました。 "私はIndexNameを設定しました"と私はクエリのparamについて話していました。 – Grork

0

noSQL(およびDynamoDB)の難点の1つは、すべてのクエリを照会することができないということです。インデックスに対してのみクエリを実行でき、インデックスは一意(ハッシュ範囲の組み合わせ)でなければなりません。 last_validlast_messageという値を持つ2つの行がある場合、GSIには1つだけが挿入されます。

パーティションキーis_validには、パーティショニング(したがって名前)を傷つけるいくつかの変数(たぶん0と1のみ)しかありません。 dbが頻繁に使用されている場合は、問題が発生します(https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitionsも参照)。

is_validが比較的頻繁に変更されない場合は、2つのテーブルを作成することを検討してください.1つは有効なものと無効なものだけです。次に、正しい表の主キーを照会することができます。 is_validを切り替えると、あるテーブルから別のテーブルにレコードを移動するだけです。

+0

ルック、ありがとう。アイデアはありますか? ScanIndexForwardを使用することはできませんが、主キーの値を指定する必要があるためクエリを使用することもできないため、スキャンできないことがわかりましたが、すべての結果を特定のFilterExpressionで並べ替えて欲しいです。私は注文を設定するために結果を「ポストプロデュース」するためにPHPを使用したくありません。 – Grork

関連する問題