Kunci Hash Anda (jenis primer) harus unik (kecuali Anda memiliki rentang seperti yang dinyatakan oleh orang lain).
Dalam kasus Anda, untuk menanyakan tabel Anda, Anda harus memiliki indeks sekunder.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Hash Key Anda adalah ID Indeks sekunder Anda didefinisikan sebagai: DataID-Created-index (itulah nama yang akan digunakan DynamoDB)
Kemudian, Anda dapat membuat kueri seperti ini:
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
}
});
Pada dasarnya kueri Anda terlihat seperti:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
Indeks sekunder akan meningkatkan unit kapasitas baca / tulis yang diperlukan sehingga Anda perlu mempertimbangkannya. Masih jauh lebih baik daripada melakukan pemindaian, yang akan mahal dalam pembacaan dan pada waktunya (dan saya dibatasi hingga 100 item).
Ini mungkin bukan cara terbaik untuk melakukannya, tetapi bagi seseorang yang terbiasa dengan RD (saya juga terbiasa dengan SQL), ini adalah cara tercepat untuk menjadi produktif. Karena tidak ada batasan terkait skema, Anda dapat menyiapkan sesuatu yang berfungsi dan setelah Anda memiliki bandwidth untuk bekerja dengan cara yang paling efisien, Anda dapat mengubah berbagai hal.
CreatedAt
lebih besar dari titik tertentu.