Su clave Hash (principal de tipo) tiene que ser única (a menos que tenga un rango como el indicado por otros).
En su caso, para consultar su tabla debe tener un índice secundario.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Su clave hash es ID Su índice secundario se define como: DataID-Created-index (ese es el nombre que usará DynamoDB)
Luego, puede realizar una consulta como esta:
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
}
});
Básicamente, su consulta se ve así:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
El índice secundario aumentará las unidades de capacidad de lectura / escritura necesarias, por lo que debe tenerlo en cuenta. Todavía es mucho mejor que hacer un escaneo, que será costoso en lecturas y en tiempo (y creo que está limitado a 100 elementos).
Puede que esta no sea la mejor manera de hacerlo, pero para alguien acostumbrado a RD (también estoy acostumbrado a SQL) es la forma más rápida de ser productivo. Dado que no hay restricciones con respecto al esquema, puede preparar algo que funcione y una vez que tenga el ancho de banda para trabajar de la manera más eficiente, puede cambiar las cosas.
CreatedAt
más de un cierto punto.