คีย์แฮชของคุณ (ลำดับหลัก) ต้องไม่ซ้ำกัน (เว้นแต่คุณจะมีช่วงตามที่ผู้อื่นระบุไว้)
ในกรณีของคุณในการสืบค้นตารางของคุณคุณควรมีดัชนีรอง
| ID | DataID | Created | Data |
|------+--------+---------+------|
| hash | xxxxx | 1234567 | blah |
Hash Key ของคุณคือ 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 รายการ)
นี่อาจไม่ใช่วิธีที่ดีที่สุดในการทำ แต่สำหรับคนที่เคยใช้ RD (ฉันคุ้นเคยกับ SQL ด้วย) เป็นวิธีที่เร็วที่สุดในการทำให้ได้ประสิทธิผล เนื่องจากไม่มีข้อ จำกัด เกี่ยวกับสคีมาคุณสามารถสร้างสิ่งที่ใช้ได้ผลและเมื่อคุณมีแบนด์วิดท์ในการทำงานอย่างมีประสิทธิภาพสูงสุดแล้วคุณสามารถเปลี่ยนแปลงสิ่งต่างๆรอบตัวได้
CreatedAt
ค่ามากกว่าจุดหนึ่งได้