Sharding (Phân mảnh dữ liệu)
Chia nhỏ database thành nhiều phần độc lập (shard/partition) phân bổ trên nhiều máy chủ. Mỗi máy chứa một phần dữ liệu → xử lý song song, tăng Throughput, giảm tải mỗi máy, và tránh sự cố toàn hệ thống (một shard hỏng, các shard khác vẫn chạy).
Các chiến lược sharding
| Chiến lược | Cách chia | Ưu / Nhược |
|---|---|---|
| Range-based | Theo khoảng giá trị khóa (ID 1–1tr, tên A–I) | Dễ truy vấn theo khoảng / phân bố không đều (hot shard) |
| Hash-based | Hàm băm trên khóa (hash(id) mod 4) | Phân bố đều / khó range query, thêm node phải rehash (dùng consistent hashing) |
| Directory/Key-based | Bảng tra cứu quyết định shard (DN→A, cá nhân→B) | Rất linh hoạt / bảng tra cứu là điểm lỗi, khó duy trì |
| Geo-based | Theo vùng địa lý (EU, Asia) | Giảm Latency, tuân thủ GDPR / phân bố không đều |
Lưu ý về Shard Key
Chọn shard key phù hợp là quan trọng nhất - nên là thuộc tính dùng thường xuyên, phân tán tương đối đều. Chọn sai tạo hot spot (một shard quá nhiều dữ liệu/truy cập).
Ban đầu một DB đơn có thể đủ cho MVP; thể hiện rằng bạn biết khi nào cần sharding (khi quy mô vượt ngưỡng) là điểm cộng. Có thể phối hợp nhiều chiến lược (geo + hash trong từng cụm).
Liên quan
- Scalability - sharding là mở rộng ngang cho tầng dữ liệu
- SQL vs NoSQL - NoSQL (Cassandra) phân tán sẵn, MySQL phải shard thủ công
- Geo-sharding - cùng ý tưởng phân bố địa lý
- Chọn kiểu lưu trữ