ThuongPh
  • Home
  • .Net
  • Microservices
  • Design pattern
  • Database
    • MongoDB
  • Curriculum Vitae
Subscribe

What are you looking for?

Thương Phạm

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.
Facebook
Linkedin

Main Menu

  • Home
  • .Net
  • Microservices
  • Design pattern
  • Database
    • MongoDB
  • Curriculum Vitae
MandgoDB
Home/Database/Cài đặt Sharding trong MongoDB với Docker Compose
DatabaseMongoDB

Cài đặt Sharding trong MongoDB với Docker Compose

Thương Phạm
Thương Phạm
27/03/2024
3 Min Read
144 Views
0 Comments

Table Of Content

  • Giới thiệu về Sharding
  • Chuẩn bị
  • Tạo Docker Compose file
  • Cấu hình Sharding
  • Kết luận

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 nano docker-compose.yml

     

  2. Thêm cấu hình sau vào file version: '3' services: mongo-1: image: mongo:4.4 restart: always command: mongod --shardsvr --replSet rs1 ports: - 27017:27017 mongo-2: image: mongo:4.4 restart: always command: mongod --shardsvr --replSet rs2 ports: - 27018:27018 mongo-3: image: mongo:4.4 restart: always command: mongod --shardsvr --replSet rs3 ports: - 27019:27019 mongo-router: image: mongo:4.4 restart: always command: mongos --configdb rs1/mongo-1:27017,rs2/mongo-2:27018,rs3/mongo-3:27019 --bind_ip_all ports: - 27020:27020 depends_on: - mongo-1 - mongo-2 - mongo-3

    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 Tùy chọn docker-compose up -d

      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

    docker exec -it <container_id> mongo

    Trong đó, .

  2. Khởi tạo replicas sets

    sh.addShard("rs1/mongo-1:27017")
    sh.addShard("rs2/mongo-2:27018") 
    sh.addShard("rs3/mongo-3:27019")

     

  3. Bật sharding cho database 

    Giả sử bạn muốn bật sharding cho database sh.enableSharding("mydb")

     

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

    Ví dụ, chúng ta sẽ shard trên collection :

    sh.shardCollection("mydb.users", { "_id": "hashed" })

     

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

    sh.status()

    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.

Last Update: 29/05/2024
dockerdocker composeMongoDBSharding

Please share this article if you like it!

Link Copied!
Thương Phạm
Written By

Thương Phạm

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.

Other Articles

1 IIhG6 748I5zr4LVFGWdQA
Previous

Handling Concurrency Conflicts trong Entity Framework Core

MS SQL Server logo
Next

SQL Server Error: Saving Changes is not permitted

No Comment! Be the first one.

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Find Me on Social

Facebook
Linkedin

Featured Items

DALL·E 2025 03 08 20.41.31 A unique and creative cover image for an article titled Kubernetes la gi Tong quan ve he thong dieu phoi container manh me nhat hien nay. The image
Kubernetes là gì? Tổng quan về hệ thống điều phối container mạnh mẽ nhất hiện nay
08/03/2025
DALL·E 2025 03 08 20.35.07 A professional and modern cover image for an article about Unit Testing in ASP.NET Core. The image should feature a laptop with code on the screen te
Unit Testing trong ASP.NET Core
08/03/2025
DALL·E 2025 03 07 19.17.33 A hand drawn sketch style illustration of a distributed microservices system. The image features multiple servers represented as simple outlined box
Circuit Breaker Pattern: Giải Pháp Cho Hệ Thống Phân Tán
07/03/2025
DALL·E 2025 03 06 22.57.36 A clean and modern graphical illustration of Redis integration with ASP.NET Core without any text or letters. Show symbolic representations such as i
Sử dụng Redis làm Cache trong ASP.NET Core
06/03/2025

Technology

image saga
Mô hình Saga trong Giao dịch Phân tán của Kiến trúc Microservice
By Thương Phạm
7 Min Read
2025 01 31 23.01.37
Kiểm tra dữ liệu đầu vào với FluentValidation và MediatR Pipeline trong ASP.NET Core
By Thương Phạm
3 Min Read
nuget cpm
Central Package Management trong NuGet: Quản lý gói tập trung cho dự án .NET
By Thương Phạm
5 Min Read

Related Posts

Prometheus e1616598180315
Microservices

Prometheus – Time series database cho việc lưu trữ metrics (Phần 1)

5 Min Read
Docker Visual Identity 18
Microservices

Kiến trúc của Docker

3 Min Read
1 idIaRZw2ML9ltXYhravRuQ
Database

Cài đặt Replica Set trong MongoDB bằng Docker Compose

2 Min Read
Đây là không gian để tôi chia sẻ những kiến thức đã đọc, những trải nghiệm thực tế và những điều thú vị trong lập trình. Mỗi bài viết là một góc nhìn, một bài học, và cũng có thể là một lời nhắc nhở để cùng nhau học hỏi và phát triển. Nếu bạn cũng đang trên con đường nâng cao kỹ năng và hiểu sâu hơn về công nghệ, hy vọng blog này sẽ mang lại cho bạn những điều hữu ích!

Editor's Pick

Prometheus e1616598180315
Prometheus – Time series database cho việc lưu trữ metrics (Phần 1)
24/03/2021
maxresdefault e1616611600219
Điện toán đám mây là gì?
25/03/2021

Recent Posts

cqrs php command query responsibility segregation 3
CQRS pattern là gì?
31/08/2021
asp.net core
ASP.NET Core Developer Roadmap
02/09/2021

Categories

.Net
Angular
ASP.NET
Azure
Cloud
Database
Design pattern
Front end
JavaScript
Microservices
Copyright © 2025 Phạm Hoài Thương

Our site uses cookies. By using this site, you agree to the Privacy Policy and Terms of Use.

Accept