簡體   English   中英

什么是存儲數千個中型文檔的最有效的面向文檔的數據庫引擎?

[英]What's the most efficient document-oriented database engine to store thousands of medium sized documents?

MongoDB還是Redis?

我聽說應該在MongoDB中保持較小的集合,以實現更好的索引編制(並使索引適合RAM),而且聽說redis很快就可以實現,但是如果您擁有更大的集合,MongoDB會更好。

如果我有成千上萬個哈希值的數千個集合,哪一種是最有效的?

我之所以這樣問,是因為在我的項目中,尚無可用的數據進行基准測試,而且我可能會設計不良的基准測試腳本,因為我對這兩個數據庫引擎(特別是Redis)的理論概念不太了解。

感謝所有回答此問題的人。

這在很大程度上取決於特定的用例。 如果您想查詢文檔ID以外的其他內容,則不要選擇Redis。 使用Redis,您將必須實現自己的索引編制方案,而這是不必要的。

實際上,在極少數情況下,對於我認為您的用例而言,Redis會是一個更好的選擇(不是Redis有什么問題,我經常同時使用Redis和Mongo,但用於不同的事情)。 在我看來,您有一些可以表示為哈希的對象。 Mongo和Redis都可以存儲哈希,但是Mongo可以做更多的事情。 使用Mongo,您可以在文檔的任何字段中搜索文檔,可以添加索引來加快文檔的速度,而該字段甚至不必是字符串,可以是數字,日期,列表甚至文檔(或文檔列表),並且所有文檔都不必放在RAM中(盡管在Redis的磁盤存儲功能完成時會有所變化)。 Redis沒有任何東西。 您必須自己實現索引才能進行搜索,除了字符串之外什么都不能存儲(有時確實很不方便),除了散列哈希之外什么都不能存儲(不求助於實現或使用某種映射)像Ohm一樣的圖層)。

您還提到了速度。 Redis的運行速度非常快,Mongo也不錯,但是,使用Mongo的用例可能會更快。 請注意,我說的是使用 Mongo,而不是說Mongo本身會更快。 事實是,如果您使用Redis並仍然希望能夠使用不是主鍵的字段來搜索文檔,則如上所述,您將必須自己實現。 然后,搜索將至少對Redis發出兩個請求,一個用於查找索引,另一個用於獲取文檔。 如果搜索結果涉及多個文檔,則您必須分別請求每個文檔。 發出所有這些請求的開銷可能會使使用Redis比使用Mongo更糟。 以我的經驗,除最簡單的緩存,隊列或類似操作外,其他任何事情都需要向Redis發出多個請求,以獲取其所需的一切。

因此,鑒於我掌握的信息有限,我建議使用MongoDB。

文檔大小雖然很重要,但對於您選擇Mongo或Redis而言,它並不是最重要的因素。 很少有人會在Mongo中達到4MB的限制,如果這樣做,可能表明您的文檔不夠詳細。 Redis具有更多用途,因此,如果您打算在應用程序狀態下將數據存儲區用於利基區域(建議框,緩存等),Redis可能更合適。 如果要保留更豐富的項目(這些項目超出了Redis的本機數據類型和結構),則Mongo可能更合適。

誠然,Redis和Mongo都非常出色,而且非常容易安裝和運行。 考慮到這是您生命周期的早期階段,請嘗試兩者並確定其大小,然后看看效果會更好。

我將在環上再扔一個選項: Berkeley DB XML 這是一個占用資源少的C ++庫,帶有C ++和Java API,可提供XML數據管理,XQuery和XPath查詢。 它被設計為非常快速,可擴展且可靠。 它支持事務,恢復和復制。 您可以使用它來存儲XML文檔以及非SQL鍵值對。

免責聲明:我是Berkeley DB的產品經理,所以我有點偏見。 但是,我們有許多客戶將BDB XML用於中型到大型文檔存儲庫。

Redis提出了二級索引,現在可以滿足您的目的。 鏈接: https ://redis.io/topics/indexes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM