Cách Sharding trong Cơ sở dữ liệu Hoạt động
Sharding là gì?
Sharding (Phân mảnh), còn gọi là Phân vùng theo chiều ngang (Horizontal Partitioning), chia một tập dữ liệu lớn (Dataset) thành các phần nhỏ hơn gọi là Shard (Mảnh), mỗi phần được lưu trữ trên một máy chủ cơ sở dữ liệu riêng biệt. Thay vì một máy khổng lồ chứa mọi thứ, dữ liệu được phân phối (Distributed) trên một cụm (Cluster) nhiều máy.
Sharding khác với Replication (Sao chép) — Replication sao chép cùng một dữ liệu đến nhiều Nodes để đảm bảo tính sẵn sàng (Availability), trong khi Sharding phân phối khác dữ liệu đến các Nodes khác nhau để mở rộng khả năng (Scalability).
Tại sao cần Sharding?
| Vấn đề | Sharding giúp gì |
|---|---|
| Dữ liệu quá lớn cho một máy | Mỗi Shard giữ một phần (Subset) — tổng dung lượng = tổng tất cả các Shard |
| Nút thắt thông lượng ghi (Write Throughput Bottleneck) | Ghi được phân tán (Spread) across các Shard — không có Node đơn lẻ phải xử lý tất cả |
| Độ trễ truy vấn cao (High Query Latency) | Mỗi Shard lập chỉ mục (Index) tập dữ liệu nhỏ hơn — truy vấn chạy nhanh hơn |
| Chi phí | Sử dụng nhiều máy phổ thông (Commodity Machines) thay vì một máy chủ đắt tiền |
Thuật ngữ quan trọng (Key Terminology)
- Shard Key (Khóa phân mảnh) — cột (hoặc tập hợp các cột) dùng để quyết định Shard nào chứa một dòng (Row) (ví dụ:
user_id,region) - Shard Router (Bộ định tuyến) — thành phần chặn truy vấn và chuyển tiếp đến Shard đúng
- Hash Function (Hàm băm) — hàm ánh xạ Shard Key đến số Shard (ví dụ:
hash(key) % num_shards) - Hotspot (Điểm nóng) — một Shard nhận lượng truy cập nhiều hơn đáng kể so với các Shard khác
- Resharding (Tái phân mảnh) — quá trình phân phối lại dữ liệu khi thêm hoặc xóa Shard
Cách Sharding hoạt động (đơn giản hóa)
1. Client sends a query (read or write) with a shard key
2. Router evaluates the shard key → determines target shard
3. Router forwards the query to the target shard only
4. Target shard processes the query
5. Router collects the result and returns it to the client
Quyết định thiết kế quan trọng là: làm sao Router quyết định Shard nào được sử dụng? Điều này quyết định chiến lược Sharding (Sharding Strategy).
Trực quan hóa
Xem cách các thao tác ghi được định tuyến đến các Shard khác nhau dưới ba chiến lược phổ biến. Chuyển đổi giữa các chế độ để so sánh phân phối (Distribution), mẫu truy vấn (Query Patterns) và đánh đổi (Trade-offs):
Applies a hash function to the shard key and uses modulo to assign data to shards. Provides even distribution but makes range queries across shards expensive.