Twój klucz Hash (główny rodzaj) musi być unikalny (chyba że masz zakres taki jak podany przez innych).
W twoim przypadku, aby wykonać zapytanie o twoją tabelę, powinieneś mieć dodatkowy indeks.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Twój klucz skrótu to ID Twój dodatkowy indeks jest zdefiniowany jako: DataID-Utworzony-indeks (to nazwa, której będzie używać DynamoDB)
Następnie możesz wykonać takie zapytanie:
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
}
});
Zasadniczo Twoje zapytanie wygląda następująco:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
Indeks pomocniczy zwiększy wymagane jednostki pojemności odczytu / zapisu, więc musisz to wziąć pod uwagę. Nadal jest o wiele lepsze niż skanowanie, które będzie kosztowne w odczytach i czasie (i jest ograniczone do 100 pozycji, jak sądzę).
Może to nie jest najlepszy sposób na zrobienie tego, ale dla kogoś przyzwyczajonego do RD (jestem przyzwyczajony do SQL) jest to najszybszy sposób na uzyskanie produktywności. Ponieważ nie ma ograniczeń co do schematu, możesz uruchomić coś, co działa, a gdy masz przepustowość do pracy w najbardziej efektywny sposób, możesz wszystko zmienić.
CreatedAt
punktem większym niż określony.