Backend nền tảng
D8 · Sharding và Partitioning
Sharding = chia ngang dữ liệu qua nhiều DB khác nhau (khác máy).
D8 · Nâng cao
Partitioning: chia một tủ hồ sơ thành nhiều ngăn. Sharding: chia hồ sơ ra nhiều tủ ở nhiều phòng khác nhau.
Cốt lõi
- Sharding = chia ngang dữ liệu qua nhiều DB khác nhau (khác máy).
- Partitioning = chia trong cùng một DB instance.
- Ví dụ: bảng Users chia theo hash user_id → Shard1, Shard2, Shard3.
Đánh đổi
Ưu: tăng khả năng ghi + đọc. Nhược: JOIN phức tạp, resharding khó, nguy cơ hot shard.
Trong thực tế
Discord sharding 10M+ theo server_id.
Bug thường gặp
Chọn shard key theo ngày tạo → toàn bộ dữ liệu mới dồn vào một shard (hot shard).
Tự hỏi lại
Chọn shard key thế nào? Range-based vs hash-based?