Câu trả lời:
Nếu bạn đang sử dụng shending, thì "bộ cân bằng tải" là quá trình mongos - thực ra nó giống như một bộ định tuyến - nó giữ một bản sao trong bộ nhớ của cơ sở dữ liệu cấu hình và có thể đưa ra quyết định dựa trên khóa shard.
Nếu bạn có nghĩa là cân bằng tải trên các bộ bản sao giống hệt nhau hoặc trên các thành viên của bộ, thì cũng có một yêu cầu tính năng để mongos xử lý tình huống đó ( https://jira.mongodb.org/browse/SERVER-1594 ), tuy nhiên được đưa ra Làm thế nào các trình điều khiển hoạt động nó không thực sự cần thiết (mặc dù nó sẽ làm cho các trình điều khiển ít phức tạp hơn).
Trong một bộ bản sao duy nhất, bạn không thể phân phối ghi, tất cả chúng phải đi đến bản chính. Bạn có thể phân phối các lần đọc cho người thứ hai, thông qua Tùy chọn đọc khi bạn thấy phù hợp. Trình điều khiển theo dõi những gì là chính và những gì là một truy vấn thứ cấp và tuyến thích hợp.
"Cân bằng tải" đạt được thông qua shending. Bằng cách shending bạn thực sự phân phối ghi / cập nhật lên từng phân đoạn. Không có thuật toán cụ thể nào thực hiện điều này vì mongo sẽ cho phép bạn phân vùng dữ liệu dựa trên bất kỳ tổ hợp khóa nào bạn muốn. Các thuật toán phân vùng tốt nhất là những thuật toán có tổng hợp các mục liên tiếp cộng với một mục ngẫu nhiên.
Ví dụ: id người dùng có thể được phân vùng như sau
xx-sha1(user email)
xx = time sequence
Xin lưu ý rằng để thực hiện shending bạn cần phải có ba máy chủ cấu hình và các nút dữ liệu. Các nút dữ liệu có thể được nhóm thành các bộ bản sao để dự phòng và có thể được sử dụng (chỉ khi bạn có thể) để đọc dữ liệu từ phụ. Tôi chỉ nói nếu bạn có thể đọc dữ liệu vì việc sao chép được thực hiện không đồng bộ nên không đảm bảo rằng dữ liệu mới sẽ có sẵn tại thời điểm truy vấn trên các phần phụ.
Hãy nhớ rằng thuật toán phân vùng hoàn toàn phụ thuộc vào bạn và phải phù hợp với nhu cầu ứng dụng của bạn. Ngoài ra, bạn nên xem xét nếu bạn chỉ muốn viết dữ liệu và chỉ thỉnh thoảng mới đọc hoặc bạn cần đọc nó ngay sau khi bạn viết nó.