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ượcCách chiaƯu / Nhược
Range-basedTheo 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-basedHà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-basedBả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-basedTheo 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