[轉載] NoSQL簡介

摘自「百度百科」。 web

NoSQL,泛指非關係型的數據庫。隨着互聯網web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了不少難以克服的問題,而非關係型的數據庫則因爲其自己的特色獲得了很是迅速的發展。NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤爲是大數據應用難題。算法

雖然NoSQL流行語火起來才短短一年的時間,可是不能否認,如今已經開始了第二代運動。儘管早期的堆棧代碼只能算是一種實驗,然而如今的系統已經更加的成熟、穩定。不過如今也面臨着一個嚴酷的事實:技術愈來愈成熟——以致於原來很好的NoSQL數據存儲不得不進行重寫,也有少數人認爲這就是所謂的2.0版本。這裏列出一些比較知名的工具,能夠爲大數據創建快速、可擴展的存儲庫。
中文名
非關係型數據庫
外文名
NoSQL=Not Only  SQL
全    稱
Not Only  SQL
類    別
非關係型的數據庫
應用領域
 

1基本含義

NoSQL(NoSQL = Not Only SQL ),意即「不只僅是 SQL」,是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢愈加高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的 關係型數據庫運用,這一律念無疑是一種全新的思惟的注入。

2NoSQL數據庫的四大分類

鍵值( Key-Value )存儲數據庫
這一類數據庫主要會使用到一個 哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對於IT系統來講的優點在於簡單、易部署。可是若是 DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。[3]  舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存儲數據庫。
這部分數據庫一般是用來應對分佈式存儲的海量數據。鍵仍然存在,可是它們的特色是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.
文檔型數據庫
文檔型數據庫的靈感是來自於Lotus Notes辦公軟件的,並且它同第一種鍵值存儲相相似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。文檔型數據庫可 以看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高。如:CouchDB, MongoDb. 國內也有文檔型數據庫SequoiaDB,已經開源。
圖形(Graph)數據庫
圖形結構的數據庫同其餘行列以及剛性結構的SQL數據庫不一樣,它是使用靈活的圖形模型,而且可以擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),所以進行數據庫查詢須要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。[2]  如:Neo4J, InfoGrid, Infinite Graph.
所以,咱們總結NoSQL數據庫在如下的這幾種狀況下比較適用:一、數據模型比較簡單;二、須要靈活性更強的IT系統;三、對數據庫性能要求較高;四、不須要高度的數據一致性;五、對於給定key,比較容易映射覆雜值的環境。

3NoSQL數據庫的四大分類表格分析

分類 Examples舉例 典型應用場景 數據模型 優勢 缺點
鍵值(key-value)[3]  Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB 內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。[3]  Key 指向 Value 的鍵值對,一般用hash table來實現[3]  查找速度快 數據無結構化,一般只被看成字符串或者二進制數據[3] 
列存儲數據庫[3]  Cassandra, HBase, Riak 分佈式的文件系統 以列簇式存儲,將同一列數據存在一塊兒 查找速度快,可擴展性強,更容易進行分佈式擴展 功能相對侷限
文檔型數據庫[3]  CouchDB, MongoDb Web應用(與Key-Value相似,Value是結構化的,不一樣的是數據庫可以瞭解Value的內容) Key-Value對應的鍵值對,Value爲結構化數據 數據結構要求不嚴格,表結構可變,不須要像關係型數據庫同樣須要預先定義表結構 查詢性能不高,並且缺少統一的查詢語法。
圖形(Graph)數據庫[3]  Neo4J, InfoGrid, Infinite Graph 社交網絡,推薦系統等。專一於構建關係圖譜 圖結構 利用圖結構相關算法。好比最短路徑尋址,N度關係查找等 不少時候須要對整個圖作計算才能得出須要的信息,並且這種結構不太好作分佈式的集羣方案。[3] 

4共同特徵

對於NoSQL並無一個明確的範圍和定義,可是他們都廣泛存在下面一些共同特徵:
  1. 不須要預約義模式:不須要事先定義數據模式,預約義表結構。數據中的每條記錄均可能有不一樣的屬性和格式。當插入數據時,並不須要預先定義它們的模式。
  2. 無共享架構:相對於將全部數據存儲的存儲區域網絡中的全共享架構。NoSQL每每將數據劃分後存儲在各個本地服務器上。由於從本地磁盤讀取數據的性能每每好於經過網絡傳輸讀取數據的性能,從而提升了系統的性能。
  3. 彈性可擴展:能夠在系統運行的時候,動態增長或者刪除結點。不須要停機維護,數據能夠自動遷移。
  4. 分區:相對於將數據存放於同一個節點,NoSQL數據庫須要將數據進行分區,將記錄分散在多個節點上面。而且一般分區的同時還要作複製。這樣既提升了並行性能,又能保證沒有單點失效的問題。
  5. 異步複製:和RAID存儲系統不一樣的是,NoSQL中的複製,每每是基於日誌的異步複製。這樣,數據就能夠儘快地寫入一個節點,而不會被網絡傳輸引發遲延。缺點是並不老是能保證一致性,這樣的方式在出現故障的時候,可能會丟失少許的數據。
  6. BASE:相對於事務嚴格的ACID特性,NoSQL數據庫保證的是BASE特性。BASE是最終一致性和軟事務。
NoSQL數據庫並無一個統一的架構,兩種NoSQL數據庫之間的不一樣,甚至遠遠超過兩種關係型數據庫的不一樣。能夠說,NoSQL各有所長,成功的NoSQL必然特別適用於某些場合或者某些應用,在這些場合中會遠遠賽過關係型數據庫和其餘的NoSQL。

5適用場景

NoSQL數據庫在如下的這幾種狀況下比較適用:一、數據模型比較簡單;二、須要靈活性更強的IT系統;三、對數據庫性能要求較高;四、不須要高度的數據一致性;五、對於給定key,比較容易映射覆雜值的環境。

6發展示狀

計算機體系結構在數據存儲方面要求具有龐大的水平擴展性,而NoSQL致力於改變這一現狀。Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型數據庫。
NoSQL項目的名字上看不出什麼相同之處,可是,它們一般在某些方面相同:它們能夠處理超大量的數據。
這場革命仍然須要等待。的確,NoSQL對大型企業來講還不是主流,可是,一兩年以後極可能就會變個樣子。在NoSQL運動的最新一次聚會中,來自世界各地的150人擠滿了CBS Interactive的一間會議室。分享他們如何推翻緩慢而昂貴的關係數據庫的暴政的經驗,怎樣使用更有效和更便宜的方法來管理數據。
關係型數據庫給你強加了太多東西。它們要你強行修改對象數據,以知足RDBMS (relational database management system, 關係型數據庫管理系統)的須要,」在NoSQL擁護者們看來,基於NoSQL的替代方案「只是給你所須要的」。
水平擴展性(horizontal scalability)指可以鏈接多個軟硬件的特性,這樣能夠將多個服務器從邏輯上當作一個實體。

7挑戰

儘管大多數NoSQL數據存儲系統都已被部署於實際應用中,但概括其研究現狀,還有許多挑戰性問題。
  1. 已有key-value數據庫產品大可能是面向特定應用自治構建的,缺少通用性;
  2. 已有產品支持的功能有限(不支持事務特性),致使其應用具備必定的侷限性;
  3. 已有一些研究成果和改進的NoSQL數據存儲系統,但它們都是針對不一樣應用需求而提出的相應解決方案,如支持組內事務特性、彈性事務等,不多從全局考慮系統的通用性,也沒有造成系列化的研究成果;
  4. 缺少相似關係數據庫所具備的強有力的理論(如armstrong公理系統)、技術(如成熟的基於啓發式的優化策略、兩段封鎖協議等)、標準規範(如SQL語言)的支持。
  5. 目前,HBase數據庫時安全特性最完善的NoSQL數據庫產品之一,而其餘的NoSQL數據庫多數沒有提供內建的安全機制,但隨着NoSQL的發展,愈來愈多的人開始意識到安全的重要,部分NoSQL產品逐漸開始提供一些安全方面的支持。
隨着雲計算、互聯網等技術的發展,大數據普遍存在,同時也呈現出了許多雲環境下的新型應用,如社交網絡網、移動服務、協做編輯等。這些新型應用對海量數據管理或稱雲數據管理系統也提出了新的需求,如事務的支持、系統的彈性等。同時雲計算時代海量數據管理系統的設計目標爲可擴展性、彈性、容錯性、自管理性和「強一致性」。目前,已有系統經過支持可隨意增減節點來知足可擴展性;經過副本策略保證系統的容錯性;基於監測的狀態消息協調實現系統的自管理性。「彈性」的目標是知足Pay-per-use 模型,以提升系統資源的利用率。該特性是已有典型NoSQL數據庫系統所不完善的,但倒是雲系統應具備的典型特色;「強一致性」主要是新應用的需求。[4]  
 
參考資料
相關文章
相關標籤/搜索