2016-03-23 6 views
1

をソート。残念ながら、スキャンでソートされたデータは返されません。何かが見つからない限り、空のクエリを持つことはできません。戻るDynamoDBのすべての結果は、私は単にDynamoDBのモデルを持っている

+0

DynamoDBのは、このユースケースをサポートしていません。このような状況になった場合は、別のデータストアにパーティションキーを格納し、最初に取得する必要があります。次に、各キーのクエリを順番に発行して、すべてのテーブルのデータを取得することができます –

+0

同じ問題が発生しています。万が一解決策を見つけましたか? ありがとうございます – jurer

答えて

0

timestamp_idでソートされたすべてのレコードを取得することはできません。

あなたはtimestamp_idを「id」ごとにソートすることができます。

dynamodb結果をコンポジットキーでソートします。

ので、あなたの場合には、あなたの行がどのように見える場合:

1,3 
1,2 
2,4 
1,5 
2,3 

あなたの場合の結果は次のとおりです。あなたが見るよう

1,2 
1,3 
1,5 
2,3 
2,4 

、結果だけtimestamp_idによって並べ替えられますが、ID-されていませんtimestamp_id。

+0

そして、そのクエリはどのように見えますか? –

+0

これはクエリではなくスキャンです。この例では、あなたのアイテムをキーでソートされたように誤って表示されます。あなたが範囲のキーでソートする項目を要求することができますが、あなたは2,3、2,4は単一の値として、パーティションキーを持つように1,2,13,1,5 –

-1

あなたは(のはそれtimestamp_id-index名前を付けましょう)GSIを作成することができます。

我々はtimestamp_id-indexすべきfixed_valという名前の属性、および当社のソートキーであることをGoogleのインデックスのパーティション・キーを指定します。

fixed_valには任意の値が入りますが、常にその値でなければならず、クライアント側から知っている必要があります。この例のために、fixed_valは常に1になるとします。

GSIキーはユニークである必要はないので、重複した2つのtimestamp_id値がある場合は心配しないでください。

あなたはこのようにテーブルを照会します:

var now = Date.now(); 

//... 

{ 
    TableName: "foo", 
    IndexName: "timestamp_id-index", 
    ExpressionAttributeNames: { 
     "#f": "fixed_value" 
    }, 
    ExpressionAttributeValues: { 
     ":f": 1, 
    }, 
    KeyConditionExpression: "#f = :f", 

    // true -> ascending, false -> descending 
    ScanIndexForward: true 
} 
+0

そのことは良い習慣が続くかもしれません。彼は多くのスループットのエラーを取得します... –

+0

@EyalChそれは良いアイデアだとは言わなかった。 **しかし**、それはひどいアイデアだテーブルレイアウト –

+0

を再設計することなく、自分の問題を回避するには、ワークロードの最も些細な何でものために、(単一の値をキーとインデックスを作成すること)である - その場合、あなたの中にとにかくメモリをスキャンして並べ替えることができます。 –

関連する問題