NoSQL,泛指非關係型的資料庫。隨著網際網路web2.0網站的興起,傳統的關係資料庫在應付web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。NoSQL資料庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據套用難題。
雖然NoSQL的流行與火起來才短短一年的時間,但是不可否認,現在已經開始了第二代運動。儘管早期的堆疊代碼只能算是一種實驗,然而現在的系統已經更加的成熟、穩定。不過現在也面臨著一個嚴酷的事實:技術越來越成熟——以至於原來很好的NoSQL數據存儲不得不進行重寫,也有少數人認為這就是所謂的2.0版本。該工具可以為大數據建立快速、可擴展的存儲庫。
基本介紹
基本含義
NoSQL資料庫的四大分類
NoSQL資料庫的四大分類表格分析
分類 | Examples舉例 | 典型套用場景 | 數據模型 | 優點 | 缺點 |
---|---|---|---|---|---|
鍵值(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 內容快取,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。 | Key 指向 Value 的鍵值對,通常用hash table來實現 | 查找速度快 | 數據無結構化,通常只被當作字元串或者二進制數據 |
列存儲資料庫 | Cassandra, HBase, Riak | 分散式的檔案系統 | 以列簇式存儲,將同一列數據存在一起 | 查找速度快,可擴展性強,更容易進行分散式擴展 | 功能相對局限 |
文檔型資料庫 | CouchDB, MongoDb | Web套用(與Key-Value類似,Value是結構化的,不同的是資料庫能夠了解Value的內容) | Key-Value對應的鍵值對,Value為結構化數據 | 數據結構要求不嚴格,表結構可變,不需要像關係型資料庫一樣需要預先定義表結構 | 查詢性能不高,而且缺乏統一的查詢語法。 |
圖形(Graph)資料庫 | Neo4J, InfoGrid, Infinite Graph | 社交網路,推薦系統等。專注於構建關係圖譜 | 圖結構 | 利用圖結構相關算法。比如最短路徑定址,N度關係查找等 | 很多時候需要對整個圖做計算才能得出需要的信息,而且這種結構不太好做分散式的集群方案。 |
共同特徵
- 不需要預定義模式:不需要事先定義數據模式,預定義表結構。數據中的每條記錄都可能有不同的屬性和格式。當插入數據時,並不需要預先定義它們的模式。
- 無共享架構:相對於將所有數據存儲的存儲區域網路中的全共享架構。NoSQL往往將數據劃分後存儲在各個本地伺服器上。因為從本地磁碟讀取數據的性能往往好於通過網路傳輸讀取數據的性能,從而提高了系統的性能。
- 彈性可擴展:可以在系統運行的時候,動態增加或者刪除結點。不需要停機維護,數據可以自動遷移。
- 分區:相對於將數據存放於同一個節點,NoSQL資料庫需要將數據進行分區,將記錄分散在多個節點上面。並且通常分區的同時還要做複製。這樣既提高了並行性能,又能保證沒有單點失效的問題。
- 異步複製:和RAID存儲系統不同的是,NoSQL中的複製,往往是基於日誌的異步複製。這樣,數據就可以儘快地寫入一個節點,而不會被網路傳輸引起遲延。缺點是並不總是能保證一致性,這樣的方式在出現故障的時候,可能會丟失少量的數據。
- BASE:相對於事務嚴格的ACID特性,NoSQL資料庫保證的是BASE特性。BASE是最終一致性和軟事務。
適用場景
發展現狀
挑戰
- 已有key-value資料庫產品大多是面向特定套用自治構建的,缺乏通用性;
- 已有產品支持的功能有限(不支持事務特性),導致其套用具有一定的局限性;
- 已有一些研究成果和改進的NoSQL數據存儲系統,但它們都是針對不同套用需求而提出的相應解決方案,如支持組內事務特性、彈性事務等,很少從全局考慮系統的通用性,也沒有形成系列化的研究成果;
- 缺乏類似關係資料庫所具有的強有力的理論(如armstrong公理系統)、技術(如成熟的基於啟發式的最佳化策略、兩段封鎖協定等)、標準規範(如SQL語言)的支持。
- 目前,HBase資料庫是安全特性最完善的NoSQL資料庫產品之一,而其他的NoSQL資料庫多數沒有提供內建的安全機制,但隨著NoSQL的發展,越來越多的人開始意識到安全的重要,部分NoSQL產品逐漸開始提供一些安全方面的支持。