La tua chiave hash (primaria di ordinamento) deve essere unica (a meno che tu non abbia un intervallo come dichiarato da altri).
Nel tuo caso, per interrogare la tua tabella dovresti avere un indice secondario.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
La tua chiave hash è ID Il tuo indice secondario è definito come: DataID-Created-index (questo è il nome che DynamoDB utilizzerà)
Quindi, puoi eseguire una query come questa:
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
}
});
Essenzialmente la tua query ha il seguente aspetto:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
L'indice secondario aumenterà le unità di capacità di lettura / scrittura richieste, quindi è necessario considerarlo. È ancora molto meglio che eseguire una scansione, che sarà costosa in lettura e in tempo (ed è limitata a 100 elementi credo).
Questo potrebbe non essere il modo migliore per farlo, ma per qualcuno abituato a RD (sono anche abituato a SQL) è il modo più veloce per diventare produttivo. Poiché non ci sono vincoli riguardo allo schema, puoi creare qualcosa che funzioni e una volta che hai la larghezza di banda per lavorare nel modo più efficiente, puoi cambiare le cose.
CreatedAt
maggiore di un certo punto.