आपकी हैश की (प्राथमिक प्रकार की) को अद्वितीय होना चाहिए (जब तक कि आपके पास अन्य लोगों द्वारा बताई गई सीमा न हो)।
आपके मामले में, अपनी तालिका को क्वेरी करने के लिए आपके पास एक द्वितीयक सूचकांक होना चाहिए।
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
आपका हैश कुंजी ID है आपका द्वितीयक सूचकांक निम्न रूप में परिभाषित किया गया है: DataID-Created-index (यह वह नाम है जिसे DynamoDB उपयोग करेगा)
फिर, आप इस तरह से एक प्रश्न बना सकते हैं:
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
}
});
अनिवार्य रूप से आपकी क्वेरी इस तरह दिखती है:
SELECT * FROM TABLE WHERE DataID = "some_id" AND Created > timestamp;
द्वितीयक सूचकांक आवश्यक पढ़ने / लिखने की क्षमता इकाइयों को बढ़ाएगा ताकि आपको उस पर विचार करने की आवश्यकता हो। यह अभी भी एक स्कैन करने से काफी बेहतर है, जो कि महंगे रीड एंड टाइम में महंगा होगा (और मेरा मानना है कि यह 100 आइटम तक सीमित है)।
यह ऐसा करने का सबसे अच्छा तरीका नहीं हो सकता है, लेकिन आरडी के लिए इस्तेमाल होने वाले किसी व्यक्ति के लिए (मैं एसक्यूएल के लिए भी उपयोग किया जाता हूं) यह उत्पादक होने का सबसे तेज़ तरीका है। चूंकि स्कीमा के संबंध में कोई अड़चन नहीं है, इसलिए आप कुछ ऐसे काम कर सकते हैं जो काम करते हैं और एक बार आपके पास सबसे कुशल तरीके से काम करने के लिए बैंडविड्थ है, तो आप चीजों को बदल सकते हैं।
CreatedAt
एक निश्चित बिंदु से अधिक के साथ सभी रिकॉर्ड के लिए क्वेरी नहीं कर सकते ।