Sharding chỉ cần thiết khi dataset thực sự quá lớn (>1-2TB) — trước đó hãy thử vertical scaling, read replicas, caching, table partitioning; shard key selection quyết định có hot spots không.
Sharding là chia data ngang (horizontal partitioning) ra nhiều database servers, mỗi shard chứa một tập con data — scale beyond single server capacity.
Shard key selection là quyết định quan trọng nhất: chọn sai gây hot spots (một shard nhận phần lớn traffic).
Ví dụ: sharding by user_id với hash — distribute evenly; sharding by country — có thể hot spot nếu US users chiếm 80% traffic.
Hot spots: timestamp làm shard key cho time-series data — mọi writes vào shard mới nhất (sequential hotspot); giải quyết bằng add random suffix hoặc dùng hash.
Range-based sharding: user 1-1M trên shard 1, 1M-2M trên shard 2 — range queries efficient nhưng dễ hot spot.
Hash-based: hash(user_id) % num_shards — distribute evenly nhưng range queries không efficient.
Resharding challenges: khi cần thêm shard phải redistribute data — tốn thời gian và có downtime risk; consistent hashing giảm số keys cần redistribute khi thêm/bỏ node.
Cross-shard queries: JOIN across shards không native — phải application-level join (scatter-gather), chậm và phức tạp.
Alternatives trước khi sharding: vertical scaling (bigger server), read replicas cho read-heavy workloads, caching layer (Redis), table partitioning (same server), archiving old data.
Sharding chỉ cần thiết khi dataset thực sự quá lớn (thường >1-2TB hoặc write throughput vượt quá single master).
Xem toàn bộ Database cùng filter theo level & chủ đề con.