2012-10-01 28 views
29

Tôi đã tìm thấy cuộc thảo luận này: MongoDB: Terrible MapReduce Performance. Về cơ bản nó nói cố gắng tránh các truy vấn MR của Mongo vì nó đơn luồng và không phải là thời gian thực ở tất cả. 2 năm trôi qua, và tôi tự hỏi điều gì đã được thay đổi kể từ thời điểm đó. Bây giờ chúng ta có MongoDb 2.2. Tôi nghe MRs hiện đa luồng. Vui lòng chia sẻ ý tưởng của bạn về việc sử dụng MR cho các yêu cầu thời gian thực như tìm nạp dữ liệu cho các yêu cầu http thường xuyên của ứng dụng web. Có thể sử dụng các chỉ mục một cách hiệu quả không?Bản đồ-Giảm hiệu suất trong MongoDb 2.2, 2.4 và 2.6

+0

Meybe khuôn khổ tổng hợp sẽ được thay đổi một cái gì đó, ngay bây giờ bản đồ giảm được đập chậm – user956584

+0

Bất cứ ý tưởng tại sao vậy? Nó vẫn là đơn luồng? – YMC

+1

http://stackoverflow.com/a/9434093/979474 hoặc http://stackoverflow.com/a/11749738/979474 – user956584

Trả lời

56

Đây là trạng thái hiện tại của chức năng cho đồ/Giảm trong MongoDB

1) Hầu hết những hạn chế hiệu suất cho Bản đồ/Giảm vẫn còn trong MongoDB phiên bản 2.2. Công cụ Map/Reduce vẫn yêu cầu mọi bản ghi được chuyển đổi từ BSON sang JSON, các tính toán thực tế được thực hiện bằng cách sử dụng công cụ JavaScript được nhúng (chậm) và vẫn có một khóa JavaScript toàn cục. để chạy cùng một lúc.

Đã có một số cải tiến gia tăng đối với Bản đồ/Giảm cho các cụm bị phân đoạn. Đáng chú ý nhất, hoạt động giảm cuối cùng hiện được phân phối trên nhiều phân đoạn, và đầu ra cũng được phân chia song song.

tôi sẽ không khuyên bạn nên Bản đồ/Giảm thời gian thực tập tại MongoDB phiên bản 2.2

2) Bắt đầu với MongoDB 2.2, bây giờ có một tập hợp khung mới. Đây là một triển khai mới của các phép toán tổng hợp, được viết bằng C++ và được tích hợp chặt chẽ vào khung công tác MongoDB.

Hầu hết các công việc Map/Reduce có thể được viết lại để sử dụng Khung tổng hợp. Chúng thường chạy nhanh hơn (cải thiện tốc độ 20x so với Map/Reduce là phổ biến trong phiên bản 2.2), chúng sử dụng đầy đủ công cụ truy vấn hiện có và bạn có thể chạy nhiều lệnh Tổng hợp song song.

Nếu bạn có yêu cầu tổng hợp theo thời gian thực, nơi đầu tiên để bắt đầu là với Khung tổng hợp. Để biết thêm thông tin về khung tập hợp, hãy nhìn vào những liên kết này:

3) Đã có trong Bản đồ/Giảm trong MongoDB phiên bản 2.4. Công cụ JavaScript SpiderMonkey đã được thay thế bằng công cụ JavaScript V8 và không còn khóa JavaScript toàn cầu nữa, điều này có nghĩa là nhiều chuỗi Bản đồ/Giảm có thể chạy đồng thời.

Các bản đồ/Giảm động cơ vẫn còn chậm hơn đáng kể so với các khuôn khổ hợp, vì hai lý do chính:

  • Động cơ Javascript được giải thích, trong khi Aggregation Khung chạy biên soạn C++

  • Công cụ JavaScript vẫn yêu cầu mọi tài liệu đang được kiểm tra được chuyển đổi từ BSON thành JSON; nếu bạn đang lưu đầu ra trong tập hợp, tập hợp kết quả sau đó phải được chuyển đổi từ JSON trở lại thành BSON

Không có thay đổi đáng kể trong Bản đồ/Giảm giữa 2,4 và 2,6.

Tôi vẫn không khuyên bạn nên sử dụng Map/Reduce cho tổng hợp thời gian thực trong MongoDB phiên bản 2.4 hoặc 2.6.

4) Nếu bạn thực sự cần Map/Reduce, bạn cũng có thể xem Bộ điều hợp Hadoop. Có thêm thông tin ở đây:

+3

Phiên bản 2.4 sắp tới có một công cụ javascript (V8) khác cần cải thiện hiệu suất. Để biết chi tiết, hãy xem tại đây: http://docs.mongodb.org/manual/release-notes/2.4/ – Kamarey

Các vấn đề liên quan