ハッシュキー(ソートのプライマリ)は一意である必要があります(他の人が述べたような範囲がない限り)。
あなたの場合、テーブルにクエリを実行するには、セカンダリ インデックスが必要です。
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
ハッシュ キーは ID です セカンダリ インデックスは次のように定義されます: DataID-Created-index (これは DynamoDB が使用する名前です)
次に、次のようなクエリを作成できます。
var params = {
TableName: "Table",
IndexName: "DataID-Created-index",
KeyConditionExpression: "DataID = :v_ID AND Created > :v_created",
ExpressionAttributeValues: {":v_ID": {S: "some_id"},
":v_created": {N: "timestamp"}
},
ProjectionExpression: "ID, DataID, Created, Data"
};
ddb.query(params, function(err, data) {
if (err)
console.log(err);
else {
data.Items.sort(function(a, b) {
return parseFloat(a.Created.N) - parseFloat(b.Created.N);
});
// More code here
}
});
基本的に、クエリは次のようになります。
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
セカンダリ インデックスは、必要な読み取り/書き込みキャパシティ ユニットを増やすため、それを考慮する必要があります。読み取りと時間のコストがかかるスキャンを実行するよりもはるかに優れています (また、100 アイテムに制限されていると思います)。
これは最善の方法ではないかもしれませんが、RD に慣れている人 (私は SQL にも慣れています) にとっては、生産性を上げるための最速の方法です。スキーマに関して制約がないため、機能するものを作り上げることができ、最も効率的な方法で作業するための帯域幅ができたら、物事を変えることができます。