2011-03-09 43 views
6

什麼是最好的非SQL替代方案,用於存儲具有非常高的更新速率和數據量的用戶數據?CouchDB或Mongo的非常高的更新率和數量?

例如從大量網站的每頁請求中傾銷數十至數百行用戶狀態/導航狀態數據。

我目前正在看Mongo或沙發,但我打開其他替代品。

編輯(迴應kprobst的請求): 它將託管在Linux上,並且可以使多個實例(HW或VM)可用。

該系統將用於存儲站點訪問者狀態,1-2周用於未經身份驗證的用戶和(可能)無限期地用於經過身份驗證的用戶。

我認爲目前業務中的思考方式是使用CouchDB,因爲我們在其他地方使用CouchDB,但我也一直在閱讀它是不斷更新的性能最差的,並且此係統有潛力更新30 - 當用戶與網站進行交互時(預計使用率非常高),將400行json轉換爲每個用戶的多個文檔。

除了這個狀態「轉儲」,其他用戶信息將被存儲並且能夠查詢那將是有用的。

+0

我更喜歡MongoDB進行這樣的分析工作。您可以使用MongoDB的自動分片並改進寫入縮放。它可能在每個碎片上並行寫入。 – edze 2011-03-09 12:14:28

回答

6

我最近研究了一些NoSQL技術,包括CouchDB和MongoDB。我得到的感覺是,MongoDB比CouchDB更適合性能,可能會犧牲某些功能。例如MongoDB使用語言特定的驅動程序,CouchDB使用REST。 MongoDB是「更新到位」,而CouchDB是MVCC。 MongoDB將數據存儲在內存映射文件中。

我選擇了MongoDB是因爲它適合我要存儲的數據類型和它提供的性能。恕我直言,我不認爲一個MVCC解決方案將是最適合你所描述的使用。隨着文檔被更新,而不是覆蓋現有文檔,它會創建一個新版本,然後將舊版本標記爲過時,意味着需要定期刪除/壓縮這些文檔。有更多的更新,這將涉及更多的工作,這將是我的關注。

這並不是說MongoDB是比CouchDB更好的選擇,因爲它們提供了不同的東西,在特定情況下可能是一種技術的缺點,在另一種情況下很可能是優勢。您顯然已經在使用CouchDB的業務中享有優勢,所以大概沒有學習曲線。

MongoDB.org上有2個比較多一點。

+0

Mongo以ACID爲代價實現了性能。所以,如果一致性是必需的特性,那麼CouchDB更合適。 – csdaraujo 2011-08-10 17:29:24

+0

恕我直言,mongodb具有比CouchDB更高的一致性,因爲mongodb使用主從複製,寫入僅在主節點上。 CouchDB使用異步主 - 主複製並提供「最終一致性」。 – Lan 2013-11-13 05:26:02

+0

CouchDB允許主人掌握,但不是主人掌握,除非你把它設置爲這樣。 – Daniel 2014-09-06 17:16:13

1

你不會說你正在運行什麼平臺,或者你可以在哪個平臺上託管你的nosql解決方案。你也不需要指定是否需要直接分佈式鍵值存儲或NoSQL數據庫,這將是MongoDB。兩件事情是不一樣的,儘管NoSQL數據庫可以用作kv商店,我想。這就是說,如果你需要一個在Linux上運行良好的簡單鍵值存儲,我會用Redis去。在所有NoSQL解決方案中,我只使用MongoDB,但它在Server 2008(64位)上運行良好,在Linux(CentOS)上運行良好。

這實際上取決於您需要什麼以及您可以在何處承載它。例如MongoDB非常需要至少兩個實例。如果你提供更多的信息,也許有人可以給你一個更好的建議。

+0

謝謝kprobst,我已根據要求更新了我的問題。 – jdoig 2011-03-09 08:05:47

1

Membase是一個磁盤持久化的基於內存的NoSQL數據庫。它是由幾名memcached領導者開發的。除了它的本地協議外,它還具有100%兼容memcache的API。 Membase已經用於大量應用,如Farmville。

Membase和CouchOne合併成Couchbase(我工作,FWIW,但我不在Membase上工作)。因此,Membase的未來將具有CouchDB功能似乎是合理的:map-reduce查詢,異地複製/備份,HTTP REST接口等。

1

另一個需要考慮的選項是Berkeley DB,它通常用於支持基於Web的大型應用程序和基礎架構(例如Amazon.com)。 Berkeley DB支持鍵/值API(NoSQL)以及SQL API。如果您正在構建基於Java的SOA解決方案,則可能需要考慮Heretix Way Back Machine使用的BDB Java Edition

聲明:我是Berkeley DB的產品經理之一,所以我有點偏袒。也就是說,BDB的編寫旨在爲您描述的各種操作提供快速,可擴展,可靠的嵌入式數據存儲。