Ваш ключ хешу (первинний сортування) повинен бути унікальним (якщо у вас немає діапазону, як зазначено іншими).
У вашому випадку для запиту таблиці ви повинні мати вторинний індекс.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Ваш хеш-ключ є ідентифікатором. Ваш вторинний індекс визначається як: 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 елементами).
Це може бути не найкращим способом зробити це, але для тих, хто звик до РД (я також звик до SQL), це найшвидший спосіб отримати продуктивність. Оскільки щодо схеми немає обмежень, ви можете створити щось, що працює, і коли у вас є пропускна здатність, щоб працювати найбільш ефективно, ви можете змінити ситуацію навколо.
CreatedAt
більше певної точки.