해시 키 (기본 정렬)는 고유해야합니다 (다른 사람이 언급 한 것과 같은 범위가없는 경우).
귀하의 경우 테이블을 쿼리하려면 보조 인덱스가 있어야합니다.
| 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에도 익숙합니다) 생산성을 얻는 가장 빠른 방법입니다. 스키마와 관련하여 제약이 없기 때문에 작동하는 것을 채울 수 있으며 가장 효율적인 방식으로 작업 할 수있는 대역폭이 있으면 상황을 변경할 수 있습니다.
CreatedAt
특정 지점보다 큰 모든 레코드를 쿼리 할 수 없습니다 .