這真的取決於你的數據集。 NoSQL設計的首要規則是首先定義您的查詢場景。一旦你真正瞭解你想要如何查詢數據,那麼你可以看看那裏的各種NoSQL解決方案。分配的默認單位是關鍵。因此,您需要記住,您需要能夠有效地在節點機器之間分割數據,否則最終將得到一個水平可伸縮的系統,並且所有工作仍在一個節點上完成(儘管根據情況可以更好地進行查詢)。
您還需要回想一下CAP定理,大多數NoSQL數據庫最終是一致的(CP或AP),而傳統的關係數據庫管理系統是CA.這會影響你處理數據和創建特定事物的方式,例如密鑰生成可能會帶來詭計。
還記得比在HBase等系統中沒有索引概念。您的所有索引都需要由應用程序邏輯構建,並且任何更新和刪除都需要按照這種方式進行管理。有了Mongo,你可以在字段上創建索引並相對快速地查詢索引,也可以將Solr與Mongo集成。您不僅需要在Mongo中通過ID進行查詢,就像您在HBase中所做的那樣,它是一個列家族(又名谷歌BigTable樣式數據庫),您基本上擁有嵌套的鍵值對。
因此,再次涉及到您的數據,您想要存儲的內容,您計劃如何存儲它,最重要的是您希望如何訪問它。莉莉項目看起來很有希望。我參與的工作是從網絡上獲取大量數據,並存儲,分析,剝離,分析,分析,流式處理,更新等。我們不僅僅使用一個系統,而是使用多個系統這最適合手頭的工作。對於這個過程,我們在不同的階段使用不同的系統,因爲它使我們能夠在需要的地方快速訪問,提供了實時流式處理和分析數據的能力,重要的是,隨時瞭解所有事情(如數據丟失)系統是一件大事)。我使用Hadoop,HBase,Hive,MongoDB,Solr,MySQL甚至是優秀的舊文本文件。請記住,使用這些技術生產系統比在服務器上安裝Oracle要困難一些,某些版本不夠穩定,而且您確實需要首先進行測試。在這一天結束的時候,它確實取決於業務阻力水平和系統的關鍵任務性質。
到目前爲止,還沒有人提到過的另一種路徑是NewSQL--即水平可伸縮的RDBMSs ......有一些像MySQL集羣(我認爲)和VoltDB可能適合您的原因。
它再次涉及到了解您的數據和訪問模式,NoSQL系統也是非Rel,即非關係型,並更適合非關係型數據集。如果您的數據具有固有的關係性,並且您需要一些SQL查詢功能,而這些功能確實需要做笛卡爾產品(又名連接),那麼您最好堅持使用Oracle,並投入一些時間進行索引,分片和性能調整。
我的建議是實際上玩幾個不同的系統。看着;
的MongoDB - 文檔 - CP
的CouchDB - 文檔 - AP
Redis的 - 在存儲器鍵值(未列族) - CP
卡桑德拉 - Column Family - Available &分區容錯(AP)
HBase的 - 柱族 - 一致&分區容錯(CP)
Hadoop的/蜂房
VoltDB - 一個非常漂亮的產品,被分發和可能工作的關係數據庫中的案例(可能更容易)。他們似乎也提供了可能更適合產品環境的企業支持(即爲企業用戶提供安全感)。
任何方式,這是我的2c。玩弄這些系統真的是你找出真正適合你的案例的唯一方法。
你能分解數據嗎? –
如果通過ID查找是BigTable或MongoDB的潛在選項,爲什麼它不是SQL的潛在選項? –
你的數據看起來像什麼? – NightWolf