Giới thiệu về Sharding

kyc0jb18ofictfyzk image3

Sharding trong MongoDB là một kỹ thuật lưu trữ và xử lý dữ liệu, cho phép chia nhỏ dữ liệu ra thành nhiều phần (shards) và phân tán chúng trên nhiều máy chủ khác nhau. Điều này giúp tăng khả năng mở rộng quy mô của cơ sở dữ liệu, cải thiện hiệu suất và đảm bảo tính khả dụng cao.

Khi sử dụng sharding, dữ liệu sẽ được chia nhỏ thành nhiều phần dựa trên một trường nhất định (shard key), và mỗi phần sẽ được lưu trữ trên một shard riêng biệt. MongoDB sẽ tự động phân phối dữ liệu giữa các shards, đồng thời cung cấp một lớp trừu tượng để người dùng có thể tương tác với dữ liệu như thể chúng vẫn nằm trong một cơ sở dữ liệu duy nhất.

Quá trình sharding trong MongoDB bao gồm các thành phần chính sau:

  1. Shards: Là các phân đoạn dữ liệu, mỗi shard chứa một phần của dữ liệu.
  2. Shard Key: Là trường dữ liệu được sử dụng để chia nhỏ dữ liệu, dựa trên giá trị của trường này, MongoDB sẽ quyết định đặt một tài liệu vào shard nào.
  3. Mongos: Đóng vai trò là router, nhận các truy vấn từ ứng dụng và điều phối chúng đến các shards thích hợp.
  4. Config Servers: Lưu trữ các metadata về cluster sharding, bao gồm thông tin về các shards và cách phân phối dữ liệu giữa chúng.

Sharding giúp gia tăng khả năng mở rộng quy mô của MongoDB bằng cách cho phép thêm nhiều máy chủ để lưu trữ dữ liệu. Nó cũng cải thiện hiệu suất bằng cách phân tán tải trên nhiều máy chủ, giảm bớt áp lực trên một máy chủ duy nhất. Tuy nhiên, sharding cũng đem lại một số phức tạp nhất định, vì vậy bạn cần cân nhắc kỹ lưỡng trước khi quyết định sử dụng nó cho dự án của mình.

Chuẩn bị

Trước khi bắt đầu, bạn cần cài đặt Docker và Docker Compose trên máy của mình. Sau đó, tạo một thư mục mới và di chuyển vào thư mục đó.

Tạo Docker Compose file

  1. Tạo một file mới có tên docker-compose.yml
     
  2. Thêm cấu hình sau vào file docker-compose.yml:

    Giải thích:

    • Chúng ta sẽ tạo ra 3 replicas sets (rs1, rs2, rs3), mỗi replica set có 1 node duy nhất.
    • Mỗi node sẽ chạy trong một container Docker riêng biệt với cổng được ánh xạ tương ứng.
    • Container mongo-router sẽ chạy mongos, đóng vai trò làm router để kết nối với các shards.
    • Tùy chọn --configdb chỉ định các địa chỉ của các replicas sets để lưu trữ metadata về sharding.
  3.  Khởi động Docker Compose

    Lệnh này sẽ khởi chạy tất cả các container trong nền (detached mode).

Cấu hình Sharding

  1. Kết nối vào mongo-router

    Trong đó, <container_id> là id của container mongo-router.

  2. Khởi tạo replicas sets

     
  3. Bật sharding cho database 

    Giả sử bạn muốn bật sharding cho database mydb:

     

  4. Chọn một collection để shard 

    Ví dụ, chúng ta sẽ shard trên collection users theo trường _id:

     

  5. Kiểm tra trạng thái sharding

    Lệnh này sẽ hiển thị thông tin về các shards, databases và collections đã được shard.

Kết luận

Bằng cách sử dụng Docker Compose, bạn có thể dễ dàng cài đặt một môi trường sharding trong MongoDB. Việc chia nhỏ dữ liệu ra thành nhiều shards giúp tăng khả năng mở rộng quy mô, cải thiện hiệu suất và đảm bảo tính khả dụng cao cho ứng dụng của bạn. Hãy nhớ rằng, sharding cũng đi kèm với một số phức tạp nhất định, do đó, bạn nên cân nhắc kỹ lưỡng trước khi quyết định sử dụng nó cho dự án của mình.

Phạm Hoài Thương

Software Engineer

About the Author

Creating an application is easy, but creating a Great, Production-Ready Application is a whole different story. Một thợ code đang mong muốn trở thành một kỹ sư thực thụ. Đây là nơi tôi chia sẽ những kiến thức tôi đọc qua hoặc trải nghiệm cảm thấy hay ho.

View Articles