Mongo Map-Giảm hoặc Shending?


7

Vì vậy, tôi đã hỏi câu hỏi này:

Thiết lập Mongo với phân cụm

Nhưng tôi không biết đủ cho đến khi tôi đọc câu trả lời và nghiên cứu thêm. Có tốt hơn không khi sử dụng Map-less hoặc shending cho các hệ thống có nhịp độ nhanh với ~ 100 truy vấn được hỏi cùng một lúc? Shending sẽ thay thế dữ liệu của tôi trên các cụm và có vẻ như nó thực sự làm giảm hoặc sắp xếp bản đồ. Nếu tôi sử dụng map-less cho các truy vấn như vậy, tôi có nên làm như vậy với một cụm không? Nếu vậy, việc bắt đầu với một máy chủ Mongo dễ dàng như thế nào, sau đó sử dụng một cụm và phân phối các tác vụ giảm bản đồ cho cụm? Hay tôi bối rối trong những gì tôi nghĩ rằng tôi cần phải hoàn thành?


Tôi muốn tặng bạn 250 đại diện khác sau khi bạn nhận được câu trả lời cho vấn đề này và nếu bạn trả lời tốt câu hỏi ở đây, tôi cũng sẽ cung cấp cho bạn 250 đại diện.
jcolebrand

Theo tôi hiểu, bạn có thể chạy một hệ thống phân đoạn duy nhất và sau đó khi bạn thêm phân đoạn thứ hai, nó sẽ phân phối với cấu hình ít hơn, nhưng đây là một nhận xét vì một lý do, vì tôi không chắc chắn 100% về điều đó.
jcolebrand

Truy vấn hệ thống phân tán bị phân mảnh về cơ bản thực hiện MapReduce, nếu bạn cần giảm dữ liệu hoặc ánh xạ nó. Tuy nhiên, có thể thực hiện một truy vấn không MapReduce trên một phân đoạn.
jcolebrand

Câu trả lời:


6

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.