Votre clé de hachage (principale de sorte) doit être unique (sauf si vous avez une plage comme indiqué par d'autres).
Dans votre cas, pour interroger votre table, vous devez avoir un index secondaire.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Votre clé de hachage est ID Votre index secondaire est défini comme: DataID-Created-index (c'est le nom que DynamoDB utilisera)
Ensuite, vous pouvez faire une requête comme celle-ci:
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
}
});
Essentiellement, votre requête ressemble à:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
L'index secondaire augmentera les unités de capacité de lecture / écriture requises, vous devez donc en tenir compte. C'est toujours bien mieux que de faire un scan, qui sera coûteux en lecture et en temps (et est limité à 100 éléments je crois).
Ce n'est peut-être pas la meilleure façon de le faire, mais pour quelqu'un qui a l'habitude de RD (je suis également habitué à SQL), c'est le moyen le plus rapide d'être productif. Comme il n'y a aucune contrainte en ce qui concerne le schéma, vous pouvez créer quelque chose qui fonctionne et une fois que vous avez la bande passante pour travailler de la manière la plus efficace, vous pouvez changer les choses.
CreatedAt
plus d'un certain point.