這實際上取決於你的數據集。 NoSQL設計的首要規則是首先定義查詢場景。一旦你真正瞭解你想要如何查詢數據,那麼你可以看看那裏的各種NoSQL解決方案。分配的默認單位是關鍵。因此,您需要記住,您需要能夠有效地在節點機器之間分割數據,否則最終將得到一個水平可伸縮的系統,並且所有工作仍在一個節點上完成(儘管根據情況可以更好地進行查詢)。
您還需要回想一下CAP定理,大多數NoSQL數據庫最終是一致的(CP或AP),而傳統的關係數據庫管理系統是CA.這會影響你處理數據和創建特定事物的方式,例如密鑰生成可能會帶來詭計。
還記得比在HBase等系統中沒有索引概念。您的所有索引都需要由應用程序邏輯構建,並且任何更新和刪除都需要按照這種方式進行管理。有了Mongo,你可以在字段上創建索引並相對快速地查詢索引,也可以將Solr與Mongo集成。您不僅需要在Mongo中通過ID進行查詢,就像您在HBase中所做的那樣,它是一個列家族(又名谷歌BigTable樣式數據庫),您基本上擁有嵌套的鍵值對。
因此,再次涉及到您的數據,您想要存儲的內容,您計劃如何存儲它,最重要的是您希望如何訪問它。莉莉項目看起來很有希望。我參與的工作是從網絡上獲取大量數據,然後存儲,分析,剝離,解析,分析,流式處理,更新等。我們不僅僅使用一個系統,而是使用多個系統這最適合手頭的工作。對於這個過程,我們在不同的階段使用不同的系統,因爲它使我們能夠在需要的地方快速訪問,提供實時流式處理和分析數據的能力,重要的是,隨時瞭解所有事情(如數據丟失)系統是一件大事)。我使用Hadoop,HBase,Hive,MongoDB,Solr,MySQL甚至是優秀的舊文本文件。請記住,使用這些技術來製作系統比在服務器上安裝MySQL要困難一些,某些版本不夠穩定,您需要首先進行測試。在這一天結束的時候,它確實取決於業務阻力水平和系統的關鍵任務性質。
到目前爲止,還沒有人提到過的另一種路徑是NewSQL--即水平可伸縮的RDBMSs ......有一些像MySQL集羣(我認爲)和VoltDB可能適合您的原因。
它再次涉及到了解您的數據和訪問模式,NoSQL系統也是非Rel,即非關係型,並更適合非關係型數據集。如果您的數據具有固有的關係性,並且您需要一些SQL查詢功能,而這些功能確實需要做笛卡爾產品(又名連接),那麼您最好堅持使用Oracle,並投入一些時間進行索引,分片和性能調整。
我的建議是實際上玩幾個不同的系統。然而,對於您的用例,我認爲Column Family數據庫可能是最好的解決方案,我認爲有幾個地方對類似的問題實施了類似的解決方案(我認爲NYTimes使用HBase監控用戶頁面點擊)。另一個很好的例子是Facebook和類似的,他們正在使用HBase。這裏有一篇非常好的文章,可以幫助你一路走,並進一步解釋以上幾點。 http://highscalability.com/blog/2011/3/22/facebooks-new-realtime-analytics-system-hbase-to-process-20.html
最後一點是,NoSQL系統不是全部,最終都是。把你的數據放入NoSQL數據庫並不意味着它將比MySQL,Oracle甚至文本文件更好地執行...例如,看到這篇博文:http://mysqldba.blogspot.com/2010/03/cassandra-is-my-nosql-solution-but.html
我會看看;
的MongoDB - 文檔 - CP
的CouchDB - 文檔 - AP
Redis的 - 在存儲器鍵值(未列族) - CP
卡桑德拉 - Column Family - Available &分區容錯(AP)
HBase的 - 柱族 - 一致&分區容錯(CP)
Hadoop的/蜂房 - 也看看Hadoop的流...
Hypertable的 - 另一個CF CP DB。
VoltDB - 一個非常好看的產品,分佈式的關係數據庫,可能適用於您的案例(可能更容易)。他們似乎也提供了可能更適合產品環境的企業支持(即爲企業用戶提供安全感)。
任何方式,這是我的2c。玩弄這些系統真的是你找出真正適合你的案例的唯一方法。
你的數據是什麼樣的? – NightWolf
1.)每個用戶有幾百條記錄,還是每個用戶只有很少的記錄? 2.)大多數查詢是否包含user_id條件? 3.)整個數據集的統計數據是否具有時間關鍵性? (可能沒有用戶可以看到)4.)您是否需要對結果集進行排序(例如按國家/地區按字母順序排列)?無論哪種方式,你都應該試試即將推出的[ArangoDB v2.6](http://arangodb.org/)! – CoDEmanX