NoSQL

NoSQL

NoSQL,泛指非關係型的資料庫。隨著網際網路web2.0網站的興起,傳統的關係資料庫在應付web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。NoSQL資料庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據套用難題。

雖然NoSQL的流行與火起來才短短一年的時間,但是不可否認,現在已經開始了第二代運動。儘管早期的堆疊代碼只能算是一種實驗,然而現在的系統已經更加的成熟、穩定。不過現在也面臨著一個嚴酷的事實:技術越來越成熟——以至於原來很好的NoSQL數據存儲不得不進行重寫,也有少數人認為這就是所謂的2.0版本。該工具可以為大數據建立快速、可擴展的存儲庫。

基本介紹

  • 中文名:非關係型資料庫
  • 外文名:NoSQL=Not Only SQL
  • 全稱:Not Only SQL
  • 類別:非關係型的資料庫
  • 套用領域計算機軟體資料庫
基本含義,NoSQL資料庫的四大分類,NoSQL資料庫的四大分類表格分析,共同特徵,適用場景,發展現狀,挑戰,

基本含義

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

NoSQL資料庫的四大分類

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

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並沒有一個明確的範圍和定義,但是他們都普遍存在下面一些共同特徵:
  1. 不需要預定義模式:不需要事先定義數據模式,預定義表結構。數據中的每條記錄都可能有不同的屬性和格式。當插入數據時,並不需要預先定義它們的模式。
  2. 無共享架構:相對於將所有數據存儲的存儲區域網路中的全共享架構。NoSQL往往將數據劃分後存儲在各個本地伺服器上。因為從本地磁碟讀取數據的性能往往好於通過網路傳輸讀取數據的性能,從而提高了系統的性能。
  3. 彈性可擴展:可以在系統運行的時候,動態增加或者刪除結點。不需要停機維護,數據可以自動遷移。
  4. 分區:相對於將數據存放於同一個節點,NoSQL資料庫需要將數據進行分區,將記錄分散在多個節點上面。並且通常分區的同時還要做複製。這樣既提高了並行性能,又能保證沒有單點失效的問題。
  5. 異步複製:和RAID存儲系統不同的是,NoSQL中的複製,往往是基於日誌的異步複製。這樣,數據就可以儘快地寫入一個節點,而不會被網路傳輸引起遲延。缺點是並不總是能保證一致性,這樣的方式在出現故障的時候,可能會丟失少量的數據。
  6. BASE:相對於事務嚴格的ACID特性,NoSQL資料庫保證的是BASE特性。BASE是最終一致性和軟事務。
NoSQL資料庫並沒有一個統一的架構,兩種NoSQL資料庫之間的不同,甚至遠遠超過兩種關係型資料庫的不同。可以說,NoSQL各有所長,成功的NoSQL必然特別適用於某些場合或者某些套用,在這些場合中會遠遠勝過關係型資料庫和其他的NoSQL。

適用場景

NoSQL資料庫在以下的這幾種情況下比較適用:
1、數據模型比較簡單;
2、需要靈活性更強的IT系統;
3、對資料庫性能要求較高;
4、不需要高度的數據一致性;
5、對於給定key,比較容易映射複雜值的環境。

發展現狀

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

挑戰

儘管大多數NoSQL數據存儲系統都已被部署於實際套用中,但歸納其研究現狀,還有許多挑戰性問題。
  1. 已有key-value資料庫產品大多是面向特定套用自治構建的,缺乏通用性;
  2. 已有產品支持的功能有限(不支持事務特性),導致其套用具有一定的局限性;
  3. 已有一些研究成果和改進的NoSQL數據存儲系統,但它們都是針對不同套用需求而提出的相應解決方案,如支持組內事務特性、彈性事務等,很少從全局考慮系統的通用性,也沒有形成系列化的研究成果;
  4. 缺乏類似關係資料庫所具有的強有力的理論(如armstrong公理系統)、技術(如成熟的基於啟發式的最佳化策略、兩段封鎖協定等)、標準規範(如SQL語言)的支持。
  5. 目前,HBase資料庫是安全特性最完善的NoSQL資料庫產品之一,而其他的NoSQL資料庫多數沒有提供內建的安全機制,但隨著NoSQL的發展,越來越多的人開始意識到安全的重要,部分NoSQL產品逐漸開始提供一些安全方面的支持。
隨著雲計算、網際網路等技術的發展,大數據廣泛存在,同時也呈現出了許多雲環境下的新型套用,如社交網路網、移動服務、協作編輯等。這些新型套用對海量數據管理或稱雲數據管理系統也提出了新的需求,如事務的支持、系統的彈性等。同時雲計算時代海量數據管理系統的設計目標為可擴展性、彈性、容錯性、自管理性和“強一致性”。目前,已有系統通過支持可隨意增減節點來滿足可擴展性;通過副本策略保證系統的容錯性;基於監測的狀態訊息協調實現系統的自管理性。“彈性”的目標是滿足Pay-per-use 模型,以提高系統資源的利用率。該特性是已有典型NoSQL資料庫系統所不完善的,但卻是雲系統應具有的典型特點;“強一致性”主要是新套用的需求。

相關詞條

熱門詞條

聯絡我們