Tôi có một bộ sưu tập mongoDB với hàng triệu hàng và tôi đang cố gắng tối ưu hóa các truy vấn của mình. Tôi hiện đang sử dụng khung tổng hợp để truy xuất dữ liệu và nhóm chúng theo ý muốn. Truy vấn tập hợp điển hình của tôi giống như sau: $match > $group > $ group > $project
Tuy nhiên, tôi nhận thấy rằng các phần cuối cùng chỉ mất vài ms, khởi đầu là chậm nhất.
Tôi đã cố thực hiện truy vấn chỉ với bộ lọc $ phù hợp, và sau đó thực hiện cùng một truy vấn với collection.find. Truy vấn tổng hợp mất ~ 80ms trong khi truy vấn tìm kiếm mất 0 hoặc 1ms.
Tôi có chỉ mục trên khá nhiều trường nên tôi đoán đây không phải là vấn đề. Bất kỳ ý tưởng về những gì có thể đi sai? Hay nó chỉ là một nhược điểm "bình thường" của khung tổng hợp?
Tôi có thể sử dụng truy vấn tìm kiếm thay vì truy vấn tổng hợp, tuy nhiên tôi sẽ phải thực hiện nhiều xử lý sau khi yêu cầu và quá trình này có thể được thực hiện nhanh chóng với $group
v.v.
Cảm ơn,
EDIT:
Đây là tiêu chí của tôi:
{
"action" : "click",
"timestamp" : {
"$gt" : ISODate("2015-01-01T00:00:00Z"),
"$lt" : ISODate("2015-02-011T00:00:00Z")
},
"itemId" : "5"
}
Bạn có thể đăng '$ match' của mình và tìm không?Trong hầu hết các tập quán, một '$ match' và một tìm kiếm phải tương đương nhưng tôi muốn xem chính xác những gì bạn đang so sánh với câu trả lời chính xác. Ngoài ra, bạn có chạy tập hợp đầu tiên và sau đó tìm? Điều gì sẽ xảy ra nếu bạn lặp lại hai lần lặp lại và so sánh thời gian? Sự khác biệt có thể là chi phí di chuyển các kết quả vào bộ nhớ từ đĩa. – wdberkeley
Tôi đã thêm tiêu chí vào bài đăng đầu tiên, tuy nhiên ngay cả khi không có tiêu chí dấu thời gian, tôi thấy một khoảng cách lớn. Nhưng bây giờ tôi tự hỏi nếu nó không liên quan đến thực tế là find() trả về một con trỏ và chỉ hiển thị các kết quả đầu tiên. – Owumaro
Ok, tôi đã có rất nhiều chỉ mục vô ích vì vậy tôi đã làm sạch mọi thứ và chỉ tạo một chỉ mục hợp chất (với các trường của bộ lọc $ match của tôi). Bây giờ tôi có hiệu suất tốt và cùng một màn trình diễn để tìm và tổng hợp với $ match :) Vấn đề được giải quyết. – Owumaro