2017-08-10 9 views
0

ハッシュキーを作成するために、DynamoDBのテーブルの設計ではいくつかのアドバイスを探してイムとのSortKeyAmazon DynamoDBテーブルに読み込み中に読み込み容量を管理する方法は?

私は

ValueMap valueMap = new ValueMap(); 
valueMap.put(":pId", pId); 
valueMap.put(":mainId", mainId); 

StringBuilder userIdList =follwing userIds List; 

QuerySpec querySpec = new QuerySpec() 
    .withProjectionExpression("id,mainId") 
    .withKeyConditionExpression("id = :pId") 
    .withFilterExpression("(userId in ("+userIdList+"))) 
    .withValueMap(valueMap).withScanIndexForward(false).withMaxResultSize(minSize); 

ItemCollection<QueryOutcome> items = table.query(querySpec); 

のような私の簡単なコードを見ては、私が使用してデータをフェッチしようとし、テーブル

HashKey - id  - date with some interval 
sortKey - mainId - date with timestamp 
      userId - someNumber 

を作成しましたidとuserIdでフィルタリングします。この場合、私のすべての読み込み容量は、ハッシュキーでデータを読み込んだ後、それにフィルタを適用するときに使用されます。この場合、データにフィルタを適用した後、私はレコードを取得しませんでした。

だから、これ以上この方法ではレコードを返さないItemCollectionが、それはそう無駄にならない容量を読み、どのようにすることができ、すべての容量(ケースユーザーIDリストにフェッチされた結果と一致していない)

どのように私はテーブルを設計することができますを読み込み修理する?

答えて

0

1つのオプションは、[Global Secondary Index][1]を追加することです。これは、キーを分割する必要があるかのように、テーブル内のデータにアクセスすることを可能にします。

次の表のスキーマのいずれか試すことができます。

ハッシュキー - ID - いくつかの間隔で日付

SORTKEY - mainId - タイムスタンプと日付

GSIハッシュキー - のuserIdを - ユーザーID(ユーザーIDでレコードを取得できるようにする)

またはこの1つ:

ハッシュキー - ID - いくつかの間隔で日付

SORTKEY - mainId - タイムスタンプ

GSIハッシュキーとデート - userId_id - 一つの属性にユーザーIDとIDが(取得することができます

複数のレコードを取得するには、BatchGetItem

を使用できます。

1回の操作で最大16 MBのデータを取得できます。データには 個のアイテムが100個まで含まれます。 応答サイズの制限を超えた場合、テーブルのプロビジョニングされたスループットが を超えた場合、または内部処理の失敗が発生した場合、BatchGetItemは部分的な結果を返します。

+0

返信ありがとうございました Instagramのような「投稿」がテーブルに格納されています。だから私はそれを時間順にソートし、10の束の大きさにしたい。それは私が従う人への投稿を得る。 –

+0

特定のユーザーのポストオーダーを時間単位で取得しますか? –

+0

はい特定の1人のユーザーではなく、私が従うユーザーのための時間順のポストが必要です。だからここに私とuser_idのリストがあります。 –

関連する問題