Sau khi nghe rất nhiều điều tốt đẹp về hiệu suất của MongoDB, chúng tôi quyết định cho Mongodb một nỗ lực để giải quyết một vấn đề mà chúng tôi có. Tôi bắt đầu bằng cách di chuyển tất cả các bản ghi chúng tôi có trong một số cơ sở dữ liệu mysql đến một bộ sưu tập duy nhất trong mongodb. Điều này dẫn đến một bộ sưu tập với 29 triệu tài liệu (mỗi một trong số họ có ít nhất 20 trường) chiếm khoảng 100 GB không gian trong HD. Chúng tôi quyết định đưa tất cả vào một bộ sưu tập vì tất cả các tài liệu đều có cùng cấu trúc và chúng tôi muốn truy vấn và tổng hợp các kết quả trên tất cả các tài liệu đó.Hiệu suất của MongoDB trên truy vấn tổng hợp
Tôi đã tạo một số chỉ mục để phù hợp với truy vấn của mình nếu không, ngay cả một số đếm đơn giản() sẽ mất độ tuổi. Tuy nhiên, các truy vấn như distinct() và group() vẫn mất quá nhiều thời gian.
Ví dụ:
// creation of a compound index
db.collection.ensureIndex({'metadata.system':1, 'metadata.company':1})
// query to get all the combinations companies and systems
db.collection.group({key: { 'metadata.system':true, 'metadata.company':true }, reduce: function(obj,prev) {}, initial: {} });
Tôi đã xem xét các bản ghi mongod và nó có rất nhiều dòng như thế này (trong khi thực hiện các truy vấn trên):
Thu Apr 8 14:40:05 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1048890 nreturned:417 154ms
Thu Apr 8 14:40:08 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1050205 nreturned:414 430ms
Thu Apr 8 14:40:18 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1049748 nreturned:201 130ms
Thu Apr 8 14:40:27 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1051925 nreturned:221 118ms
Thu Apr 8 14:40:30 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1053096 nreturned:250 164ms
...
Thu Apr 8 15:04:18 query database.$cmd ntoreturn:1 command reslen:4130 1475894ms
Truy vấn này mất 1475894ms mà là cách dài hơn những gì tôi mong đợi (danh sách kết quả có khoảng 60 mục). Trước hết, liệu điều này có được dự kiến cho số lượng lớn tài liệu trong bộ sưu tập của tôi không? Các truy vấn tổng hợp nói chung có được mong đợi quá chậm trong Mongodb không? Bất kỳ suy nghĩ về làm thế nào tôi có thể cải thiện hiệu suất?
Tôi đang chạy mongod trong một máy tính có lõi kép và bộ nhớ 10GB.
Cảm ơn bạn.
Câu hỏi này quá cũ và vẫn đến với các công cụ tìm kiếm khi bạn tìm kiếm khung công tác tổng hợp MongoDB. Mario bạn đã không đề cập đến phiên bản MongoDB của bạn, vì chúng cải thiện AF rất nhiều trong 2,4 và tôi đang làm nó trên một m1 crappy. EC2 với bộ nhớ 3.7G trên một bộ sưu tập với 69m và nó nhanh hơn so với trước đây. Bạn đã thử phiên bản mới hay bạn đã đi với một cách tiếp cận khác? Chắc chắn có rất nhiều điểm chuẩn cho AF so với MapReduce nhưng hãy xem xét điểm mới nhất từ 10Gen http://blog.mongodb.org/post/62900213496/qaing-new-code-with-mms-map-reduce-vs -kết hợp tnx – Maziyar
Cảm ơn nhận xét của bạn. Điều này đã trở lại vào năm 2010, tôi tin rằng chúng tôi đã sử dụng một cái gì đó giống như MongoDB 1.4.0. Đã lâu rồi, tôi chắc chắn có rất nhiều thứ đã thay đổi trong mongodb từ nhưng tôi đã không làm việc trong dự án đó kể từ cuối năm đó :) –
Cảm ơn Mario đã trả lời. Tôi mới bắt đầu sử dụng MongoDB (khoảng một năm) và chỉ tự hỏi xem điều gì đã xảy ra với dự án của bạn. Chúc may mắn :) – Maziyar