𝗦𝗵𝗮𝗿𝗱𝗶𝗻𝗴 𝗧𝗼́𝗺 𝘁ắ𝘁

Sharding chia nhỏ một cơ sở dữ liệu lớn thành các phần nhỏ hơn được gọi là các shard. Thay vì một cơ sở dữ liệu khổng lồ, bạn phân phối dữ liệu trên nhiều máy chủ.

Phương pháp này giúp bạn:

  • Xử lý nhiều dữ liệu hơn
  • Xử lý nhiều yêu cầu hơn
  • Giảm tải cho các máy đơn lẻ
  • Mở rộng theo chiều ngang

Bạn phải quyết định cách định tuyến dữ liệu đến đúng shard. Dưới đây là các chiến lược chính:

  1. Sharding dựa trên phạm vi (Range Based Sharding) Bạn chia dữ liệu dựa trên một phạm vi giá trị. Ví dụ:
  • Shard 1: Người dùng từ 1 đến 3000
  • Shard 2: Người dùng từ 3001 đến 6000
  • Shard 3: Người dùng từ 6001 đến 10000
  1. Sharding dựa trên hàm băm (Hash Based Sharding) Bạn sử dụng một hàm toán học để chọn một shard. Ví dụ: Bạn sử dụng toán tử modulo trên ID người dùng. Nếu kết quả là 0, dữ liệu sẽ được đưa vào Shard 1. Nếu kết quả là 1, nó sẽ vào Shard 2. Cách này giúp phân phối dữ liệu đồng đều.

  2. Sharding dựa trên danh mục (Directory Based Sharding) Bạn sử dụng một bảng tra cứu để tìm shard chính xác. Ví dụ: Một hệ thống thông báo tra cứu tên ứng dụng như "YouTube" trong một danh mục. Danh mục sẽ chỉ dẫn hệ thống sử dụng "Shard 1". Cách này hoạt động giống như một thư mục trong hệ thống tệp tin.

  3. Sharding theo địa lý (Geographical Sharding) Bạn lưu trữ dữ liệu dựa trên vị trí. Ví dụ:

  • Người dùng Ấn Độ sẽ vào shard Ấn Độ.
  • Người dùng Mỹ sẽ vào shard Mỹ.
  • Người dùng Châu Âu sẽ vào shard EU.
  1. Sharding động (Dynamic Sharding) Bạn không mã hóa cứng các phạm vi hoặc hàm băm. Ứng dụng của bạn sẽ kiểm tra một bảng cấu hình tại thời điểm thực thi (runtime). Bạn có thể thêm các shard mới mà không cần thay đổi mã nguồn.

  2. Sharding hỗn hợp (Hybrid Sharding) Bạn kết hợp các phương pháp để đạt được kết quả tốt hơn. Một mô hình phổ biến là Directory Based + Hash Based. Đầu tiên, bạn sử dụng một danh mục để tìm một nhóm. Sau đó, bạn sử dụng hàm băm để tìm shard cụ thể trong nhóm đó. Điều này mang lại cho bạn cả tính linh hoạt và sự cân bằng.

Nguồn: https://dev.to/code_with_aravind/sharding-in-a-nutshell-5f6b