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

Mongodb Giải thích cho khung Tổng hợp

Bắt đầu với MongoDB phiên bản 3.0, chỉ cần thay đổi thứ tự từ

collection.aggregate(...).explain()

đến

collection.explain().aggregate(...)

sẽ cung cấp cho bạn kết quả mong muốn (tài liệu tại đây).

Đối với các phiên bản cũ hơn> =2.6, bạn sẽ cần sử dụng explain tùy chọn cho các hoạt động đường ống tổng hợp

explain:true

db.collection.aggregate([
    { $project : { "Tags._id" : 1 }},
    { $unwind : "$Tags" },
    { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
    { $group: { 
        _id : "$_id",
        count: { $sum:1 } 
    }},
    {$sort: {"count":-1}}
  ],
  {
    explain:true
  }
)

Một cân nhắc quan trọng với Khung tổng hợp là một chỉ mục chỉ có thể được sử dụng để tìm nạp dữ liệu ban đầu cho một đường dẫn (ví dụ:sử dụng $match , $sort , $geonear ở phần đầu của một đường dẫn) cũng như $lookup tiếp theo và $graphLookup các giai đoạn. Sau khi dữ liệu đã được tìm nạp vào quy trình tổng hợp để xử lý (ví dụ:chuyển qua các giai đoạn như $project , $unwind$group ) thao tác tiếp theo sẽ nằm trong bộ nhớ (có thể sử dụng các tệp tạm thời nếu allowDiskUse đã đặt tùy chọn).

Tối ưu hóa đường ống

Nói chung, bạn có thể tối ưu hóa các đường ống tổng hợp bằng cách:

  • Bắt đầu một đường dẫn với $match để hạn chế xử lý các tài liệu có liên quan.
  • Đảm bảo $match ban đầu / $sort các giai đoạn được hỗ trợ bởi một chỉ mục hiệu quả.
  • Lọc dữ liệu sớm bằng $match , $limit$skip .
  • Giảm thiểu các giai đoạn không cần thiết và thao tác tài liệu (có thể xem xét lại giản đồ của bạn nếu yêu cầu thể dục tổng hợp phức tạp).
  • Tận dụng các toán tử tổng hợp mới hơn nếu bạn đã nâng cấp máy chủ MongoDB của mình. Ví dụ:MongoDB 3.4 đã thêm nhiều giai đoạn và biểu thức tổng hợp mới, bao gồm hỗ trợ làm việc với mảng, chuỗi và khía cạnh.

Ngoài ra còn có một số Tối ưu hóa đường ống tổng hợp tự động xảy ra tùy thuộc vào phiên bản máy chủ MongoDB của bạn. Ví dụ:các giai đoạn liền kề có thể được liên kết lại và / hoặc sắp xếp lại thứ tự để cải thiện việc thực hiện mà không ảnh hưởng đến kết quả đầu ra.

Hạn chế

Như trong MongoDB 3.4, Khung tổng hợp explain tùy chọn cung cấp thông tin về cách xử lý một đường dẫn nhưng không hỗ trợ cùng mức chi tiết như executionStats chế độ cho một find() truy vấn. Nếu bạn đang tập trung vào việc tối ưu hóa việc thực thi truy vấn ban đầu, bạn có thể sẽ thấy hữu ích khi xem lại find().explain() tương đương truy vấn với executionStats hoặc allPlansExecution độ dài.

Có một số yêu cầu tính năng liên quan để xem / ủng hộ trong trình theo dõi vấn đề MongoDB liên quan đến số liệu thống kê thực thi chi tiết hơn để giúp tối ưu hóa / đường ống tổng hợp hồ sơ:

  • SERVER-19758:Thêm các chế độ giải thích "executeStats" và "allPlansExecution" vào giải thích tổng hợp
  • SERVER-21784:Theo dõi thống kê thực thi cho từng giai đoạn của quy trình tổng hợp và hiển thị thông qua giải thích
  • SERVER-22622:Cải thiện $ lookup giải thích để chỉ ra kế hoạch truy vấn trên bộ sưu tập "từ"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoose:tìm dữ liệu bằng cách lặp lại trên một mảng mô hình

  2. MongoDB $ round so với $ trunc:Sự khác biệt là gì?

  3. Tải lên và truy xuất tệp bằng MongoDB và Spring Boot

  4. Tạo trang web cửa hàng thực phẩm trực tuyến bằng Angular, NodeJS, Express và MongoDB

  5. sử dụng chuỗi cho mongodb _id