Partition key quyết định data distribution trên các storage partitions của DynamoDB. Hash function áp dụng lên partition key để xác định partition lưu trữ item.
| Cardinality | Ví dụ | Kết quả |
|---|---|---|
| ✅ Cao | user_id, order_id, session_id | Data phân bố đều |
| ❌ Thấp | status (“active”/“inactive”), date | Hot partition |
Partition A: [status=active] → 90% traffic ← THROTTLED
Partition B: [status=inactive] → 10% traffic ← Under-utilized
| Strategy | Ví dụ | Use Case |
|---|---|---|
| Natural high-cardinality | user_id | User-centric data |
| Composite | user_id#order_date | Range queries per user |
| Write sharding | status#random_suffix | Distribute hot keys |
| Calculated suffix | date#hash(user_id) % N | Time-series + distribution |
import random
def get_sharded_key(status, shard_count=10):
shard = random.randint(0, shard_count - 1)
return f"{status}#{shard}"
# PK: "active#3", "active#7", "active#1" → distributed
Hot partition → throttling dù tổng capacity đủ. Adaptive capacity giúp nhưng không thay thế good key design.
Exam Tip: Đề hỏi “throttling despite sufficient capacity” → hot partition → cần high-cardinality key hoặc write sharding.