Không rõ ý của bạn là gì khi so sánh thu nhỏ bản đồ với shending. Nhưng câu trả lời ngắn gọn là: shending .
Nói chung, bạn thiết kế các truy vấn thu nhỏ bản đồ, bạn không muốn 100 truy vấn thu nhỏ bản đồ được thực thi cùng một lúc - bạn sẽ quá tải mongo vì điều đó có nghĩa là 100 bộ sưu tập quét toàn bộ được chạy cùng một lúc.
Nếu bạn có một ví dụ về một trong những truy vấn giảm bản đồ hiện tại của bạn - vui lòng thêm nó vào câu hỏi của bạn.
Về shending, tất cả đều thuộc về những gì bạn sử dụng cho khóa shending.
Ví dụ: nếu bạn chọn bộ sưu tập người dùng trên tên người dùng,
db.users.find()
sẽ khiến mongos gửi truy vấn đến tất cả các phân đoạn và hợp nhất các tập kết quả lại với nhau (một cách thông minh). Thêm khóa shending vào truy vấn:
db.users.find().sort({username: 1}).limit(100);
sẽ cung cấp cho mongos tùy chọn để nói chuyện với ít mongod hơn tại một thời điểm.
một ví dụ tốt hơn, nếu bạn truy vấn:
db.users.find({username: /^bob/})
mongos sẽ gửi truy vấn đến các phân đoạn có khóa shard cho biết chúng có thể chứa câu trả lời, rất có thể đó chỉ là một máy chủ, dẫn đến truy vấn nhanh và không tải thêm phần nào của mongos.
Có thể các ví dụ trên không phải là tin tức với bạn.
Các truy vấn bạn gửi cho mongo bây giờ là cùng một cú pháp bạn sử dụng để gửi đến cơ sở dữ liệu được phân chia. Điều duy nhất bạn làm khác là (trước đây) phân tích về những phím nào cần phân tách để bạn có thể, khi cần thiết, sửa đổi các truy vấn của mình để kết hợp khóa shending và do đó cho phép mongos hoạt động như một proxy thay vì trình điều khiển.
Khóa shending kém, hoặc đơn giản là không tận dụng lợi thế của shending trong các truy vấn bạn đang tạo, sẽ dẫn đến việc mongos cần truy vấn tất cả các máy chủ mongod cho tất cả các truy vấn dẫn đến tải cao và hiệu suất kém.