MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

So sánh tổng hợp MongoDB:group (), $ group và MapReduce

Nó hơi khó hiểu vì các tên giống nhau, nhưng group() lệnh là một tính năng và cách triển khai khác với $group nhà điều hành đường ống trong Khung tổng hợp.

Lệnh nhóm (), Khung tổng hợp và MapReduce được gọi chung là các tính năng tổng hợp của MongoDB. Có một số điểm trùng lặp về các tính năng, nhưng tôi sẽ cố gắng giải thích sự khác biệt và hạn chế của từng tính năng như trong MongoDB 2.2.0.

Lưu ý: tập hợp kết quả nội tuyến được đề cập bên dưới đề cập đến các truy vấn được xử lý trong bộ nhớ với kết quả trả về khi kết thúc lệnh gọi hàm. Các tùy chọn đầu ra thay thế (hiện chỉ khả dụng với MapReduce) có thể bao gồm việc lưu kết quả vào bộ sưu tập mới hoặc bộ sưu tập hiện có.

group() Lệnh

  • Cú pháp và chức năng đơn giản để tạo nhóm .. tương tự như GROUP BY trong SQL.

  • Trả về nội tuyến tập hợp kết quả (dưới dạng một mảng các mục được nhóm).

  • Được triển khai bằng cách sử dụng công cụ JavaScript; tùy chỉnh reduce() các hàm có thể được viết bằng JavaScript.

  • Hạn chế hiện tại

    • Sẽ không nhóm thành một tập hợp kết quả có hơn 20.000 khóa.

    • Kết quả phải nằm trong giới hạn của tài liệu BSON (hiện tại là 16MB).

    • Có khóa đọc và không cho phép bất kỳ chuỗi nào khác thực thi JavaScript trong khi nó đang chạy.

    • Không hoạt động với các bộ sưu tập đã phân đoạn.

  • Xem thêm: ví dụ về lệnh group () .

MapReduce

  • Triển khai mô hình MapReduce để xử lý các tập dữ liệu lớn.

  • Có thể chọn từ một trong số các tùy chọn đầu ra (nội dòng, bộ sưu tập mới, hợp nhất, thay thế, giảm bớt)

  • Các hàm MapReduce được viết bằng JavaScript.

  • Hỗ trợ các bộ sưu tập đầu vào không phân đoạn và phân đoạn.

  • Có thể được sử dụng để tổng hợp gia tăng trên các bộ sưu tập lớn.

  • MongoDB 2.2 triển khai hỗ trợ tốt hơn nhiều cho việc giảm sản lượng bản đồ phân mảnh.

  • Hạn chế hiện tại

    • Một bản phát ra chỉ có thể chứa một nửa kích thước tài liệu BSON tối đa của MongoDB (16MB).

    • Có một khóa JavaScript nên máy chủ mongod chỉ có thể thực thi một hàm JavaScript tại một thời điểm .. tuy nhiên, hầu hết các bước của MapReduce đều rất ngắn nên các khóa có thể được thực hiện thường xuyên.

    • Các hàm MapReduce có thể khó gỡ lỗi. Bạn có thể sử dụng print()printjson() để bao gồm đầu ra chẩn đoán trong mongod nhật ký.

    • MapReduce thường không trực quan cho các lập trình viên đang cố gắng dịch trải nghiệm tổng hợp truy vấn quan hệ.

  • Xem thêm: Bản đồ / Rút gọn ví dụ .

Khung tổng hợp

  • Tính năng mới trong bản phát hành sản xuất MongoDB 2.2.0 (tháng 8 năm 2012).

  • Được thiết kế với các mục tiêu cụ thể là cải thiện hiệu suất và khả năng sử dụng.

  • Trả về nội dòng tập hợp kết quả.

  • Hỗ trợ các bộ sưu tập đầu vào không phân đoạn và phân đoạn.

  • Sử dụng phương pháp tiếp cận "đường ống" trong đó các đối tượng được chuyển đổi khi chúng đi qua một loạt các toán tử đường ống như đối sánh, chiếu, sắp xếp và nhóm.

  • Người vận hành đường ống không cần tạo một tài liệu đầu ra cho mọi tài liệu đầu vào:người vận hành cũng có thể tạo tài liệu mới hoặc lọc ra tài liệu.

  • Sử dụng phép chiếu, bạn có thể thêm các trường được tính toán, tạo các đối tượng con ảo mới và trích xuất các trường con vào cấp cao nhất của kết quả.

  • Các toán tử đường ống có thể được lặp lại khi cần thiết (ví dụ:nhiều $project hoặc $group các bước.

  • Hạn chế hiện tại

    • Kết quả được trả về nội dòng, do đó bị giới hạn ở kích thước tài liệu tối đa được máy chủ hỗ trợ (16MB)

    • Không hỗ trợ nhiều tùy chọn đầu ra như MapReduce

    • Giới hạn đối với các toán tử và biểu thức được hỗ trợ bởi Khung tổng hợp (tức là không thể viết các hàm tùy chỉnh)

    • Tính năng máy chủ mới nhất để tổng hợp, vì vậy có nhiều chỗ để hoàn thiện hơn về tài liệu, bộ tính năng và cách sử dụng.

  • Xem thêm: Ví dụ về Khung tổng hợp .

Ai đó có thể đưa ra hình ảnh minh họa hoặc hướng dẫn tôi liên kết nơi ba khái niệm này được giải thích cùng nhau, lấy cùng một dữ liệu mẫu để tôi có thể so sánh chúng dễ dàng không?

Nói chung, bạn sẽ không tìm thấy các ví dụ hữu ích nếu so sánh cả ba cách tiếp cận, nhưng đây là các câu hỏi StackOverflow trước đây cho thấy các biến thể:

  • nhóm () so với Khung tổng hợp
  • MapReduce so với Khung tổng hợp



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để duyệt hoặc truy vấn dữ liệu MongoDB trực tiếp?

  2. Sọc:Phải cung cấp nguồn hoặc khách hàng

  3. error:tham số kiểu `D` phải được sử dụng làm tham số kiểu cho một số kiểu cục bộ

  4. cách chuyển đổi chuỗi thành giá trị số trong mongodb

  5. Làm thế nào để sử dụng dữ liệu được kết xuất bởi mongodump?