[TIL] Kĩ thuật sharding

Tình cờ trong lúc lướt facebook xem review phim thì thấy 1 post của team Grokking Việt Nam về sự khác nhau giữa sharding và partitioning, tò mò nên search đọc thử và tranh thủ note vài dòng

Sharding là gì?

  • Sharding là kĩ thuật chia nhỏ bảng gốc ra thành các bảng con.
  • Mục đích để giảm dung lượng bảng bố => query sẽ nhanh hơn.

Sharding theo chiều dọc

Chia bảng gốc thành các bảng nhỏ hơn, mỗi bảng chứa 1 vài cột.

Cách này sẽ phù hợp với hệ thống có nghiệp vụ lấy dữ liệu chỉ một vài cột, thi thoảng mới lấy hết.

Sharding theo chiều ngang

Chia bảng gốc thành các bảng con nhỏ hơn. Mỗi bảng đều chứa số cột y như bảng bố.

Mục đích để chia đều các bản ghi (row) vào các table con => mỗi khi lấy dữ liệu thì duyệt qua 1 tập nhỏ hơn => tăng performance.

Cách này phù hợp với hệ thống cần lấy dữ liệu của tất cả các row.

Cách này cá nhân mình thấy có vẻ thơm hơn, áp dụng được vào nhiều hệ thống. Na ná cách sharding của Elastic Search vậy.

Sharding và partitioning có gì khác nhau?

  • Thật ra 2 khái niệm này đều hướng đến chia dữ liệu nhỏ hơn cho tăng performance + dễ xử lý => gần như tương đương nhau. Hơi khó để so sánh.
  • Sự khác nhau lớn nhất: partition chia nhỏ dữ liệu trong 1 database instance, shard chia nhỏ dữ liệu trong nhiều database instance hoặc nhiều computer được => chỗ này cũng chưa hiểu lắm. Đang đi đọc thêm. Hiểu thì quay lại note vào luôn.

Cảm ơn bạn, vì đã đọc bài.

Chúc bạn một ngày làm việc hiệu quả.

Bình luận về bài viết này