2011-12-06 17 views
6

Tôi đang đánh giá MongoDB, đến từ Membased/memcached vì tôi muốn linh hoạt hơn.MongoDB có hiệu quả khi thực hiện tra cứu đa khóa không?

Tất nhiên Membase là tuyệt vời khi thực hiện tra cứu nhanh (đa).

Tôi thích các tùy chọn bổ sung mà MongoDB cung cấp cho tôi, nhưng nó cũng nhanh chóng thực hiện tra cứu đa khóa không? Tôi đã thấy toán tử $ hoặc $ và tôi chắc chắn rằng tôi có thể mô hình hóa nó với điều đó. Tôi chỉ muốn biết nếu nó là biểu diễn (trong cùng một giải đấu) như là Membase.

trường hợp sử dụng, ví dụ: Lucene/Solr trả về 20 id sản phẩm. Tìm kiếm các id sản phẩm này trong Couchdb để trả lại tài liệu/các trường thích hợp.

Cảm ơn, Geert-Jan

Trả lời

3

Đối với trường hợp sử dụng của bạn, tôi muốn nói rằng, từ kinh nghiệm của mình: Tôi đã hack một số phân tích vào cơ sở dữ liệu của tôi. . Trước sự ngạc nhiên của tôi, nó hoạt động khá tốt, ở khu vực mili giây thấp hơn.

Tất nhiên, thật khó để so sánh điều này và lý thuyết -as bình thường- là người bạn đồng hành xấu khi nói đến hiệu suất. Tôi đoán cách tốt nhất để tìm ra nó là di chuyển một số dữ liệu thử nghiệm và gửi một số truy vấn đến hệ thống.

Sử dụng trình biên dịch tích hợp tuyệt vời của MongoDB, sử dụng $explain, giữ nguyên chỉ mục một lần cho mỗi quy tắc truy vấn, xem nhật ký, theo dõi mong mong và thực hiện một số tiêu chí. Điều này sẽ không mất quá nhiều thời gian và cung cấp cho bạn câu trả lời rõ ràng và chắc chắn. Nếu truy vấn của bạn trở nên chậm chạp, mọi người ở đây và trên nhóm tin tức có thể có một số ý tưởng về cách cải thiện truy vấn chính xác hoặc lập chỉ mục.

+0

Ok, tôi sẽ xem. Đào một chút có vẻ như Mongo-DB sử dụng B-tree dưới bìa cho chỉ mục của nó, có nghĩa là tìm kiếm x sản phẩm trên khóa chính có thể có chi phí O (x * log N) (thay vì độ phức tạp O (x) cho Membase dựa trên hashtrees/bảng) .. Nếu chỉ mục trong mem, điều này có lẽ là bỏ qua cho trường hợp sử dụng của tôi. Cảm ơn –

1

Một chỉ số cho mỗi truy vấn. Đôi khi, các truy vấn trên nhiều khóa có thể sử dụng nhiều chỉ mục; đây không phải là trường hợp với MongoDB. Nếu bạn có truy vấn chọn nhiều khóa và bạn muốn truy cập truy vấn đó để sử dụng chỉ mục một cách hiệu quả, thì chỉ mục một khóa hợp chất là cần thiết.

http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Oneindexperquery.

Có thêm thông tin trên trang đó liên quan đến Chỉ mục.

Điểm mấu chốt là Mongo sẽ tuyệt vời nếu các chỉ mục của bạn nằm trong bộ nhớ và bạn đang lập chỉ mục trên các cột bạn muốn truy vấn bằng các phím tổng hợp. Nếu bạn có chỉ mục kém thì hiệu suất của bạn sẽ bị ảnh hưởng. Điều này là khá nhiều phù hợp với hầu hết các hệ thống.

+0

Multikey! = Nhiều chỉ mục – mnemosyn

+0

Không, nhưng nó không liên quan trực tiếp đến câu hỏi của anh ấy. Nếu anh ta muốn truy vấn trên nhiều cột mà không tạo các phím tổng hợp thì hiệu suất sẽ bị ảnh hưởng. Nếu anh ta sẵn sàng dành thời gian để lập chỉ mục đúng thì Mongo sẽ là đủ. – methodin

+0

Tôi hiểu 'một chỉ mục cho mỗi truy vấn'-thần chú vì nó đề cập đến việc tạo các phím tổng hợp để bạn chỉ cần một chỉ mục để truy vấn. Trường hợp sử dụng cụ thể này không cần các chỉ mục tổng hợp, v.v. Tôi chỉ có khoảng 10 triệu tài liệu (sản phẩm) với một productid duy nhất. Tôi muốn biết nếu thực hiện một truy vấn như '$ in (, , )' có hiệu quả, với trường hợp đặc biệt là productid là khóa chính. Vì vậy, sẽ có 1 chỉ mục bao gồm truy vấn của tôi.Có lẽ tôi đang quá hăng hái, nhưng tôi cẩn thận hơn khi tôi thấy một cái gì đó trông giống như mệnh đề SQL IN khi nói về hiệu suất. –

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