Sharding là một phương pháp cho phép phân phối dữ liệu qua lại giữa nhiều máy chủ khác nhau. Cơ chế này đặc biệt được sử dụng nhiều trong các hệ thống lớn, đòi hỏi thông lượng cao để giải quyết nhiều các bài toán khó. Trong bài viết này, Stringee sẽ cùng các bạn tìm hiểu về Sharding, một cơ chế phân phối dữ liệu mà MongoDB hỗ trợ nhé.

1. Giới thiệu về Sharding trong các cơ sở dữ liệu

Các hệ thống cơ sở dữ liệu với các tập dữ liệu lớn sẽ gây ra những khó khăn nhất định cho khả năng chịu đựng của một máy chủ. Với nhu cầu truy vấn cao, một máy chủ sẽ có những yêu cầu cao hơn về phần cứng và cấu hình đặc thù về mặt OS. Để giải quyết vấn đề này, chúng ta có thể sử dụng hai giải pháp là horizontal scaling hay còn gọi là mở rộng theo chiều ngang và vertical scaling - mở rộng theo chiều dọc:

  • Vertical scaling: scale theo chiều dọc liên quan đến việc tăng dung lượng của một máy chủ, chẳng hạn như sử dụng CPU mạnh hơn hay thêm RAM hoặc tăng dung lượng lưu trữ.
  • Horizontal scaling: scale theo chiều ngang liên quan đến việc chia nhỏ dữ liệu của hệ thống và tải chúng lên nhiều server, thêm server để tăng công suất. Mặc dù tốc độ hoặc công suất chung của mỗi máy có thể vẫn thế nhưng mỗi máy xử lý một tập hợp con của khối lượng dữ liệu chung nên nó có khả năng mang lại hiệu quả tốt hơn so với một server công suất cao.

MongoDB hỗ trợ scale theo chiều ngang thông qua Sharding. Và đây cũng là những gì Stringee sẽ giới thiệu thông qua bài viết này.

2. Sharded Cluster

MongoDB Sharded cluster sẽ gồm các thành phần:

  • Shard: mỗi một Shard chứa một tập con của dữ liệu tổng. Ngoài ra mỗi Shard có thể được triển khai như một bản sao của Shard khác.
  • Mongos: đây là thành phần hoạt động như một query router, cung cấp một interface giữa client và Sharded cluster.
  • Config servers: đây là thành phần lưu trữ metadata và cấu hình cho mỗi cluster.

MongoDB phân chia dữ liệu ở mức collection và phân phối chúng trong các Shard ở trên các cluster.

>>> Xem thêm bài viết về MongoDB:

Tìm hiểu về cơ sở dữ liệu phi quan hệ MongoDB

Sử dụng map reduce trong MongoDB

Giới thiệu về GridFS trong MongoDB

3. Shard Keys

MongoDB sử dụng Shard key để phân phối các collections's documents trên các Shard. Shard key bao gồm một hoặc nhiều trường tồn tại trong mọi document trong collection cần truy vấn.

Bạn phải chọn Shard key khi Sharding một collection. Việc lựa chọn Shard key không thể thay đổi sau khi Sharding. Một Sharded collection có thể chỉ có một Shard key duy nhất. 

Việc lựa chọn một Shard key sẽ ảnh hưởng đến khả năng làm việc, độ hiệu quả và khả năng co giãn của một cluster. Một cluster với các cấu hình mạnh mẽ nhất hoàn toàn có thể bị nghẽn cổ chai về sử dụng một Shard key sai với mục đích sử dụng. MongoDB có các bài viết rất hay về việc chọn một Shard Key trong cluster, bạn có thể xem thêm tại đây.

4. Ưu điểm của Sharding

  • Reads/Writes: mỗi truy vấn sử dụng một Shard key có thể giúp ta target nó đến một Shard cụ thể. Việc này làm giảm thời gian truy vấn cùng với đó có thể giúp giảm CPU time cho các truy vấn trong các cơ sở dữ liệu lớn.
  • Khả năng lưu trữ: Việc sử dụng Shards trên cluster cho phép mỗi Shard chứa một tập hợp con của dữ liệu tổng. Khi dữ liệu lớn lên thì việc thêm các Shards sẽ tăng khả năng lưu trữ của cluster.
  • Tính khả dụng cao: Việc đọc ghi vẫn sẽ ổn cho dù có vài Shard bị down vì mỗi máy đã sao lưu các Shard của các máy khác và chúng ta vẫn có thể đọc ghi được.

Kết

Trong bài viết này, Stringee và các bạn đã cùng nhau tìm hiểu về Sharding trong MongoDB. Đây là một kỹ thuật và là một tính năng hay cho phép chúng ta có thể cấu hình cluster cho cụm cơ sở dữ liệu của mình, giúp tăng khả năng chịu tải và có thể chia các vùng dữ liệu khác nhau về thành các Shard riêng biệt phục vụ cho việc tăng hiệu suất tìm kiếm.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: