2011-12-06 29 views
6

我正在評估來自Membased/memcached的MongoDB,因爲我想要更多的靈活性。mongoDB是否有效地進行多鍵查找?

當然,Membase在快速(多)鍵查找方面非常出色。

我喜歡MongoDB給我的附加選項,但是它在進行多鍵查找時速度也很快?我見過$或$ in運算符,我確信我可以用它來建模。我只想知道它是否與Membase一樣(在同一聯盟中)。

用例,例如,Lucene/Solr返回20個產品ID。在Couchdb中查找這些產品ID以返回文檔/適當的字段。

謝謝, 吉爾特 - 揚每次查詢

回答

3

對於您的使用案例,我想說的是,根據我的經驗:我將一些分析入侵到了我的數據庫中,這些數據庫使用數千個ID創造了很多$in查詢,並且它工作正常(這是一種黑客行爲) 。令我驚訝的是,它在毫秒級的下方工作得很好。

當然,很難比較這一點,並且 - 當平常 - 理論在性能上是一個糟糕的伴侶。我想最好的解決辦法是遷移一些測試數據並向系統發送一些查詢。

使用MongoDB優秀的內置分析器,使用$explain,記住每個查詢規則的一個索引,查看日誌,關注mongostat並做一些基準測試。這不應該花太長的時間,並給你一個肯定和肯定的答案。如果您的查詢速度緩慢,那麼這裏和新聞組的人員可能會對如何改進確切的查詢或索引有一些想法。

+0

好吧,我會看看。挖掘一下看起來,Mongo-DB似乎在它的索引下使用B樹,這意味着在主鍵上查找x個產品可能需要花費O(x * log N)(而不是基於Hash樹的複雜度O(x)表)。如果索引是在mem中,這對我的用例可能是可以忽略的。謝謝 –

1

一個指數。有時候認爲多個 鍵上的查詢可以使用多個索引; MongoDB並非如此。如果 有一個查詢可以在多個鍵上進行選擇,並且您希望 查詢有效地使用索引,則必需使用複合鍵索引 。

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

該頁面還有更多關於索引的信息。

如果您的索引在內存中,並且您使用組合鍵在要查詢的列上編制索引,則底線是Mongo會很好。如果您的索引較差,那麼您的性能會因此受到影響。這與大多數系統非常相似。

+0

Multikey!=多個索引 – mnemosyn

+0

不,它不會但它直接關係到他的問題。如果他期望在不創建組合鍵的情況下查詢多個列,那麼性能將受到影響。如果他願意花時間進行正確的索引,那麼Mongo當然就足夠了。 – methodin

+0

我明白'每個查詢一個索引',因爲它指的是製作組合鍵,所以你只需要一個索引來查詢。這種特殊用例不需要複合索引等。我只有大約1000萬個文檔(產品),每個文檔都有獨特的產品。我想知道,如果執行查詢'$ in'(,,)'是有效的,那麼productid是主鍵的特殊情況。所以會有1個索引覆蓋我的查詢。也許我過於熱情,但當我在談論性能時看到類似SQL IN-clause的東西時,我會特別小心。 –

相關問題