1.3.1 High-Cardinality Partition Keys

High-Cardinality Partition Keys

Partition Key là gì?

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.

High Cardinality = Balanced Distribution

CardinalityVí dụKết quả
✅ Caouser_id, order_id, session_idData phân bố đều
❌ Thấpstatus (“active”/“inactive”), dateHot partition

Hot Partition Problem

Partition A: [status=active]  → 90% traffic  ← THROTTLED
Partition B: [status=inactive] → 10% traffic ← Under-utilized
  • Dù tổng capacity đủ, hot partition vẫn bị throttling
  • Adaptive Capacity tự động redistribute nhưng không thay thế good key design

Composite Key Strategies

StrategyVí dụUse Case
Natural high-cardinalityuser_idUser-centric data
Compositeuser_id#order_dateRange queries per user
Write shardingstatus#random_suffixDistribute hot keys
Calculated suffixdate#hash(user_id) % NTime-series + distribution

Write Sharding Example

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
  • Trade-off: Cần scatter-gather khi đọc (query tất cả shards)

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.