Ihr Hash-Schlüssel (primär sortiert) muss eindeutig sein (es sei denn, Sie haben einen Bereich, wie er von anderen angegeben wurde).
In Ihrem Fall sollten Sie zum Abfragen Ihrer Tabelle einen Sekundärindex haben.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Ihr Hash-Schlüssel ist ID. Ihr Sekundärindex ist definiert als: DataID-Created-Index (das ist der Name, den DynamoDB verwendet)
Dann können Sie eine Abfrage wie folgt durchführen:
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
}
});
Im Wesentlichen sieht Ihre Anfrage so aus:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
Der Sekundärindex erhöht die erforderlichen Lese- / Schreibkapazitätseinheiten, sodass Sie dies berücksichtigen müssen. Es ist immer noch viel besser als ein Scan, der in Lese- und Zeitaufwand teuer ist (und meiner Meinung nach auf 100 Artikel begrenzt ist).
Dies ist vielleicht nicht der beste Weg, aber für jemanden, der an RD gewöhnt ist (ich bin auch an SQL gewöhnt), ist es der schnellste Weg, um produktiv zu werden. Da es keine Einschränkungen hinsichtlich des Schemas gibt, können Sie etwas erstellen, das funktioniert, und sobald Sie die Bandbreite haben, um auf die effizienteste Weise zu arbeiten, können Sie Änderungen vornehmen.
CreatedAt
mehr als einem bestimmten Punkt abfragen können .