Hash anahtarınız (sıralamanın birincil) benzersiz olmalıdır (başkalarının belirttiği gibi bir aralığınız yoksa).
Sizin durumunuzda, tablonuzu sorgulamak için ikincil bir dizine sahip olmanız gerekir.
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Karma Anahtarınız Kimliktir İkincil dizininiz şu şekilde tanımlanır: Veri Kimliği Oluşturulan dizin (DynamoDB'nin kullanacağı ad budur)
Daha sonra şöyle bir sorgu yapabilirsiniz:
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
}
});
Esasen sorgunuz şöyle görünür:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
İkincil Dizin, gerekli okuma / yazma kapasitesi birimlerini artıracağından, bunu dikkate almanız gerekir. Yine de bir tarama yapmaktan çok daha iyi, okuma ve zaman açısından maliyetli olacak (ve inandığım 100 öğeyle sınırlı).
Bunu yapmanın en iyi yolu bu olmayabilir, ancak RD'ye alışkın biri için (ben de SQL'e alışkınım) üretken olmanın en hızlı yolu budur. Şema ile ilgili herhangi bir kısıtlama olmadığından, çalışan bir şeyi kırbaçlayabilirsiniz ve en verimli şekilde çalışmak için bant genişliğine sahip olduğunuzda, etrafındaki şeyleri değiştirebilirsiniz.
CreatedAt
belirli bir noktadan daha büyük tüm kayıtları sorgulayamazsınız .