Sunday, September 15, 2013

Amazon DynamoDB - 注意事項

之前有講到你需要根據預估的使用者情境來決定table要怎麼設計以及讀寫throughput,
其實還有一些Dynamo本身的限制是我們在設計table時也需要列入考量的,

參考文件: Limits in Amazon DynamoDB


[資料的限制]
1. Item size: 單一筆資料的大小限制
- 64KB, 各別資料的attribute名稱跟值總和不能超過64K

2. Hash primary key attribute value: Hash key值的大小限制
- 2048 bytes

3. Range primary key attribute value: Range key值的大小限制
- 1024 bytes

4. Hash or hash-and-range primary key(Number of hash key values): Hash key的個數限制
- 一個table可以存放無限個hash key

5. Hash-and-range primary key(Number of range keys per hash value): Range key的限制
- 針對有設定local secondary index的table, 同一個hash key底下的range key, 其整體item的大小(原始table加上index table)不能超過10 GB

6. Maximum number of values in an attribute set: 單一筆資料能放的attribute個數限制
- 只要單一資料整體大小在64KB以內, 要有幾個attribute都可以.


[存取行為限制]
1. BatchGetItem
- 一次最多只能抓1MB以內的資料, 最多是100個item
- 如果超過這次能處理的量, response內會提供有UnprocessedKeys讓你可以在下一輪處理
- request可以跨不同的table

2. BatchWriteItem
- 一次最多只能新增或刪除1MB以內的資料, 最多是25個item
- 不支援資料更新
- 如果超過這次能處理的量, response內會提供有UnprocessedKeys讓你可以在下一輪處理
- request可以跨不同的table

3. Query
- 一次最多只能抓1MB以內的資料
- 如果超過這次能處理的量, response內會提供有LastEvaluatedKey讓你可以在下一輪處理
- 可以用ScanIndexForward來指定query的順序

4. Scan
- 一次最多只能檢查1MB以內的資料
- 如果超過這次能處理的量, response內會提供有LastEvaluatedKey讓你可以在下一輪處理
- 能夠透過切segment作Parallel Scan來加快尋找的速度


這些規則乍看起來沒什麼, 但最好要謹記在心
如果你有一個資料會越長越大(像是要記一個使用者買過甚麼東西),
那就千萬不能把他塞在只有hash key(用使用者ID)的table裡,(還記得64KB的限制嗎?)
要再加上range key(用購買時間或交易編號)把每一筆子資料拆開
大概就是這樣囉!

前兩集:
Amazon DynamoDB - 踏出第一步
Amazon DynamoDB - 使用table的最高指導原則

No comments:

Post a Comment