2017-12-19 5 views
2

Dynamo DBを使用していて、filterを使用して1つのテーブルをスキャンしたいとします。たとえば、グローバルセカンダリインデックスを使用して特定の行だけをテーブルからスキャンできますか?Dynamo DBの特定の行をスキャンする

+0

「特定の行」とはどういう意味ですか?あなたは例を挙げることができますか? –

+0

たとえば、私のテーブルは50行あり、いくつかの属性( "status")がnullの行だけをスキャンして、 "status"値がnullの15行があるとします。だから、ちょうどその15行だけをスキャンしたいのですが – ilce

+0

はい、テーブルハッシュ/範囲キーについて説明し、クエリを記述してください。 –

答えて

3

あなたはステータスがnullであるかどうかと言う二分属性、をスキャンする場合は、スパースインデックスを活用し、はるかに効率的であれば、それは可能です!

best practices for GSI

は、テーブル内の任意の項目についてスパースインデックスの

を活用してくださいインデックスキー値がある場合は、AWSの文書、DynamoDBのが唯一のグローバルセカンダリインデックスに対応するエントリを書きますから、アイテムに存在する。グローバル・セカンダリ索引の場合、これは索引パーティション・キーとソート・キー(存在する場合)です。索引キー値がすべての表項目に表示されない場合、索引はスパースと呼ばれます。

疎なグローバルセカンダリインデックスを使用して、珍しい属性を持つテーブル項目を効率的に見つけることができます。これを行うには、グローバル・セカンダリ索引属性を含まない表項目がまったく索引付けされないという事実を利用します。たとえば、GameScoresテーブルでは、「Champ」のような特定の成績を達成したプレイヤーがいるかもしれませんが、ほとんどのプレーヤーはそうしていません。 ChampsのGameScoresテーブル全体をスキャンするのではなく、ChampのパーティションキーとUserIdのソートキーを使用して、グローバルセカンダリインデックスを作成することができます。これにより、テーブルをスキャンする代わりにインデックスを照会することで、すべてのChampsを簡単に見つけることができます。

このようなクエリは、インデックス内のアイテムの数がテーブル内のアイテムの数よりも大幅に少なくなるため、非常に効率的です。さらに、インデックスに投影する表属性が少ないほど、索引から消費する読取り容量単位は少なくなります。

+0

ありがとうCanSahin.Iこれを試して、それは動作します。もう一度ありがとう。 – ilce

4

それはできません!検索は常に基本表のすべての行に対して行われ、索引表をレスポンスとしてスキャンすると、その索引表に含まれる属性のみが取得されます。

例: あなたが1000行を持つテーブルがあると属性場合:ID、名前、姓、今年、市、郵便番号、およびプライマリキー「街」とそのテーブルのためのGSIを作成し、「郵便番号」が含ま投影されたアトリビュートとして使用し、再びインデックステーブルをスキャンすると1000行すべてが処理されますが、レスポンスとして各行に対してちょうど "都市"と "郵便番号"が表示されます。 Gainはスループットを低下させますが、GSIの作成時に設定する読み書き容量の単位は毎月かかります。

関連する問題