Ваш ключ Hash (первичная обмотка рода) должен быть уникальным (если у вас нет диапазон, как указано другими).
В вашем случае для запроса вашей таблицы вы должны иметь вторичный индекс.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Ваш Hash Ключ ID Ваш вторичный индекс определяется как: DataID-Созданный индекс (это имя, которое 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;
secondar y Индекс увеличит требуемые единицы чтения/записи, поэтому вам необходимо это учитывать. Это все же намного лучше, чем делать сканирование, которое будет дорогостоящим в чтении и вовремя (и ограничено 100 пунктами, которые я считаю).
Это может быть не самый лучший способ сделать это, но для кого-то, используемого для RD (я также привык к SQL), это самый быстрый способ получить продуктивность. Поскольку нет ограничений в отношении схемы, вы можете взломать что-то, что работает, и как только у вас есть пропускная способность, чтобы работать наиболее эффективным способом, вы можете изменить ситуацию.
См. Комментарии к нижеприведенному ответу; есть * не * способы справиться с этим сейчас, по крайней мере, не для того, что спросил ОП. В GSI по-прежнему требуется указать хэш-ключ, поэтому вы не можете запрашивать все записи с 'CreatedAt' больше определенной точки. – pkaeding
@pkaeding Чтобы выполнить проверку против GSI, вы должны указать значение хэша, это правильно. Хотя это значение хеша для GSI (ключевое поле) НЕ Хэш-значение для базовой таблицы. API сканирования позволяет использовать '>' условия фильтрации, которые необходимы для этого варианта использования. –
@MikeBrant правильно, но вопрос задал вопрос о том, как «получить ** все» элементы, созданные после определенной даты и отсортированные по дате »(акцент мой). Насколько мне известно, это невозможно. – pkaeding