MongoDB Sharding: Hướng dẫn từng bước với ví dụ
⚡ Tóm tắt thông minh
MongoDB Phân mảnh dữ liệu (sharding) chia các tập dữ liệu lớn thành các tập con nhỏ hơn được phân tán trên nhiều máy chủ. MongoDB Các phiên bản riêng lẻ giúp giảm tải CPU trên bất kỳ máy chủ nào. Cụm phân mảnh kết hợp các phân mảnh, máy chủ cấu hình và bộ định tuyến để mở rộng dung lượng lưu trữ và thông lượng truy vấn theo chiều ngang.
Sharding là gì MongoDB?
Sharding là một khái niệm trong MongoDB, chia các tập dữ liệu lớn thành các tập dữ liệu nhỏ trên nhiều MongoDB các trường hợp.
Đôi khi dữ liệu bên trong MongoDB Dữ liệu sẽ rất lớn đến mức các truy vấn trên các tập dữ liệu lớn như vậy có thể gây ra tình trạng sử dụng CPU cao trên máy chủ. Để giải quyết tình trạng này, MongoDB có khái niệm về Sharding, về cơ bản là chia tách các tập dữ liệu trên nhiều MongoDB các trường hợp.
Bộ sưu tập, có thể có kích thước lớn, thực chất được chia thành nhiều bộ sưu tập nhỏ hơn, hay còn gọi là các Phân mảnh (Shards). Về mặt logic, tất cả các phân mảnh hoạt động như một bộ sưu tập duy nhất.
Ưu điểm của phân mảnh trong MongoDB
Trước khi triển khai cụm máy chủ phân mảnh, việc hiểu lý do tại sao các nhóm áp dụng phân mảnh là rất hữu ích. Những lợi ích chính bao gồm:
- Khả năng mở rộng theo chiều ngang: Dữ liệu được phân tán trên nhiều máy chủ thông thường thay vì buộc một máy chủ duy nhất phải ngày càng lớn mạnh.
- Thông lượng cao hơn: Các thao tác đọc và ghi được thực hiện song song trên các phân vùng, do đó cụm máy chủ xử lý được nhiều yêu cầu hơn mỗi giây.
- Dung lượng lưu trữ lớn hơn: Tổng dung lượng ổ đĩa của tất cả các phân vùng có thể chứa các tập dữ liệu lớn hơn nhiều so với dung lượng lưu trữ của một máy chủ đơn lẻ.
- Tính khả dụng cao: Khi mỗi phân vùng được triển khai như một tập hợp bản sao, sự cố của một nút duy nhất sẽ không làm sập toàn bộ cụm.
- Tải trọng cân bằng: MongoDB Bộ cân bằng tự động phân phối lại các khối dữ liệu để ngăn chặn bất kỳ phân vùng nào trở thành điểm nóng.
Nhìn chung, những ưu điểm này khiến việc phân mảnh dữ liệu trở thành phương pháp tiêu chuẩn để mở rộng quy mô. MongoDB vượt ra ngoài giới hạn của một máy chủ duy nhất.
Cách triển khai Sharding
Phân mảnh được triển khai bằng cách sử dụng các cụm, thực chất chỉ là một nhóm các cụm máy tính. MongoDB các trường hợp.
Các thành phần cấu tạo nên một Mảnh vỡ bao gồm:
- một mảnh vỡ – Đây là điều cơ bản và không gì khác hơn là một MongoDB instance chứa tập hợp con của dữ liệu. Trong môi trường sản xuất, tất cả các phân đoạn cần phải là một phần của bộ bản sao.
- Cấu hình máy chủ - Đây là một MongoDB phiên bản chứa siêu dữ liệu về cụm, về cơ bản là thông tin về các loại khác nhau MongoDB các trường hợp sẽ chứa dữ liệu phân đoạn.
- Bộ định tuyến - Đây là một MongoDB Về cơ bản, đây là một instance chịu trách nhiệm chuyển hướng các lệnh do client gửi đến đúng máy chủ.
Phân chia từng bước Cluster Ví dụ
Bước 1) Tạo một cơ sở dữ liệu riêng cho máy chủ cấu hình.
mkdir /data/configdb
Bước 2) Bắt đầu MongoDB ở chế độ cấu hình. Giả sử chúng ta có một máy chủ tên là Server D, đây sẽ là máy chủ cấu hình của chúng ta. Chúng ta cần chạy lệnh dưới đây để cấu hình máy chủ này thành máy chủ cấu hình.
mongod --configdb ServerD:27019
Bước 3) Khởi động phiên bản mongos bằng cách chỉ định máy chủ cấu hình.
mongos --configdb ServerD:27019
Bước 4) Từ giao diện dòng lệnh mongo, hãy kết nối đến phiên bản mongos.
mongo --host ServerD --port 27017
Bước 5) Nếu bạn có Máy chủ A và Máy chủ B cần được thêm vào cụm, hãy thực hiện các lệnh dưới đây.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Bước 6) Bật tính năng phân mảnh dữ liệu (sharding) cho cơ sở dữ liệu. Vì vậy, nếu cần phân mảnh cơ sở dữ liệu Employeedb, hãy thực hiện lệnh sau.
sh.enableSharding("Employeedb")
Bước 7) Bật tính năng phân mảnh (sharding) cho bộ sưu tập. Vì vậy, nếu chúng ta cần phân mảnh bộ sưu tập Employee, hãy thực hiện lệnh sau.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Cách chọn khóa phân mảnh trong MongoDB
Khóa phân mảnh là trường được lập chỉ mục, hoặc tập hợp các trường, mà MongoDB Khóa được sử dụng để quyết định phân vùng nào lưu trữ tài liệu nào. Vì khóa điều khiển việc phân phối dữ liệu, việc lựa chọn khóa tốt là quyết định quan trọng nhất trong triển khai phân vùng. Một khóa kém chất lượng sẽ tập trung dữ liệu và lưu lượng truy cập vào một phân vùng duy nhất, làm mất đi lợi ích của việc phân vùng.
Một khóa phân mảnh mạnh thường có những đặc điểm sau:
- Số lượng phần tử lớn: Trường này nên có nhiều giá trị khả dĩ để dữ liệu có thể được chia thành nhiều phần nhỏ.
- Tần số thấp: Không nên có một giá trị nào chiếm ưu thế tuyệt đối, nếu không các tài liệu có chung giá trị đó sẽ bị dồn lại trên cùng một phân vùng.
- Thay đổi không đơn điệu: Các khóa luôn tăng dần, chẳng hạn như dấu thời gian, sẽ gửi mọi thao tác ghi mới đến cùng một phân vùng, tạo ra điểm nóng.
MongoDB Hỗ trợ hai chiến lược phân vùng dựa trên khóa. Phân vùng theo phạm vi chia dữ liệu thành các phạm vi liền kề và phù hợp với các truy vấn phạm vi, trong khi phân vùng băm áp dụng hàm băm để phân bổ các thao tác ghi đồng đều trên các phân vùng. Các nhóm thường bắt đầu với phân vùng băm khi thao tác ghi nhiều và chuyển sang phân vùng theo phạm vi khi thao tác đọc dựa trên phạm vi chiếm ưu thế. Cho dù bạn chọn chiến lược nào, hãy kiểm tra khóa với các mẫu truy vấn thực tế trước khi cam kết, vì khóa phân vùng không thể dễ dàng thay đổi sau khi dữ liệu đã được tải.
Phân mảnh so với sao chép trong MongoDB
Phân mảnh dữ liệu (sharding) và sao chép dữ liệu (replication) là hai tính năng bổ sung cho nhau nhưng khác biệt. Bảng dưới đây nêu bật sự khác biệt để bạn có thể áp dụng từng tính năng một cách chính xác, và trên thực tế, các cụm máy chủ sản xuất thường sử dụng cả hai cùng nhau.
| Yếu tố | Sharding | Nhân rộng |
|---|---|---|
| Mục đích | Mở rộng theo chiều ngang bằng cách chia dữ liệu | Bảo vệ dữ liệu và đảm bảo dữ liệu luôn sẵn sàng. |
| Dữ liệu trên mỗi nút | Một tập hợp con (một phân vùng) của dữ liệu | Bản sao đầy đủ của dữ liệu |
| Lợi ích chính | Dung lượng lưu trữ và thông lượng cao hơn | Khả năng chịu lỗi và mở rộng quy mô đọc |
| Các thành phần chính | Shards, máy chủ cấu hình, bộ định tuyến mongos | Thành viên chính và phụ |
Tóm lại, phân mảnh dữ liệu đáp ứng nhu cầu về khả năng mở rộng, trong khi sao chép dữ liệu đáp ứng nhu cầu về tính khả dụng, và một hệ thống triển khai mạnh mẽ kết hợp cả hai.

