複製鏈接
請複製以下鏈接發送給好友

NoSQL

鎖定
NoSQL,泛指非關係型的數據庫。隨着互聯網web2.0網站的興起,傳統的關係數據庫在處理web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,出現了很多難以克服的問題,而非關係型的數據庫則由於其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,特別是大數據應用難題。
中文名
非關係型數據庫
外文名
NoSQL=Not Only SQL
全    稱
Not Only SQL
類    別
非關係型的數據庫
應用領域
計算機軟件數據庫
分    類
鍵值存儲、列存儲、文檔存儲等

NoSQL基本含義

NoSQL最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL僅僅是一個概念,泛指非關係型的數據庫,區別於關係數據庫,它們不保證關係數據的ACID特性。NoSQL是一項全新的數據庫革命性運動,其擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一概念無疑是一種全新的思維的注入。
NoSQL有如下優點:易擴展,NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關係數據庫的關係型特性。數據之間無關係,這樣就非常容易擴展。無形之間也在架構的層面上帶來了可擴展的能力。大數據量,高性能,NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關係性,數據庫的結構簡單。 [1] 

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。
不同分類特點對比
分類
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並沒有一個明確的範圍和定義,但是他們都普遍存在下面一些共同特徵:
易擴展
NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關係數據庫的關係型特性。數據之間無關係,這樣就非常容易擴展。無形之間,在架構的層面上帶來了可擴展的能力。 [2] 
大數據量,高性能
NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關係性,數據庫的結構簡單。一般MySQL使用Query Cache。NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來説性能就要高很多。 [2] 
靈活的數據模型
NoSQL無須事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關係數據庫裏,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是——個噩夢。這點在大數據量的Web 2.0時代尤其明顯。 [2] 
高可用
NoSQL在不太影響性能的情況,就可以方便地實現高可用的架構。比如Cassandra、HBase模型,通過複製模型也能實現高可用。 [2] 

NoSQL體系框架

NoSQL框架體系NosoL整體框架分為四層,由下至上分為數據持久層(data persistence)、整體分佈層(data distribution model)、數據邏輯模型層(data logical model)、和接口層(interface),層次之間相輔相成,協調工作。 [3] 
數據持久層定義了數據的存儲形式,主要包括基於內存、基於硬盤、內存和硬盤接口、訂製可拔插四種形式。基於內存形式的數據存取速度最快,但可能會造成數據丟失。基於硬盤的數據存儲可能保存很久,但存取速度較基於內存形式的慢。內存和硬盤相結合的形式,結合了前兩種形式的優點,既保證了速度,又保證了數據不丟失。訂製可拔插則保證了數據存取具有較高的靈活性。 [3] 
數據分佈層定義了數據是如何分佈的,相對於關係型數據庫,NoSQL可選的機制比較多,主要有三種形式:一是CAP支持,可用於水平擴展。二是多數據中心支持,可以保證在橫跨多數據中心是也能夠平穩運行。三是動態部署支持,可以在運行着的集羣中動態地添加或刪除節點。 [3] 
數據邏輯層表述了數據的邏輯表現形式,與關係型數據庫相比,NoSQL在邏輯表現形式上相當靈活,主要有四種形式:一是鍵值模型,這種模型在表現形式上比較單一,但卻有很強的擴展性。二是列式模型,這種模型相比於鍵值模型能夠支持較為複雜的數據,但擴展性相對較差。三是文檔模型,這種模型對於複雜數據的支持和擴展性都有很大優勢。四是圖模型,這種模型的使用場景不多,通常是基於圖數據結構的數據定製的。 [3] 
接口層為上層應用提供了方便的數據調用接口,提供的選擇遠多於關係型數據庫。接口層提供了五種選擇:Rest,Thrift,Map/Reduce,Get/Put,特定語言API,使得應用程序和數據庫的交互更加方便。 [3] 
NoSQL分層架構並不代表每個產品在每一層只有一種選擇。相反,這種分層設計提供了很大的靈活性和兼容性,每種數據庫在不同層面可以支持多種特性。 [3] 

NoSQL適用場景

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

NoSQL數據庫軟件

Membase
Membase是NoSQL家族的一個新的重量級成員。Membase是開源項目,源代碼採用了Apache2.0的使用許可。該項目託管在GitHub.Source tarballs上,可以下載Beta版本的Linux二進制包。該產品主要是由North Scale的Memcached核心團隊成員開發完成的,其中還包括Zynga和NHN這兩個主要貢獻者,這兩個組織都是很大的在線遊戲和社區網絡空間供應商。 [2] 
Membase容易安裝、操作,可以從單節點方便地擴展到集羣,而且為Memcached(有線協議的兼容性)實現了即插即用功能,在應用方面為開發者和經營者提供了一個較低的門檻。作為緩存解決方案,Memcached已經在不同類型的領域(特別是大容量的Web應用)有了廣泛的使用,其中Memcached的部分基礎代碼被直接應用到了Membase服務器的前端。 [2] 
通過兼容多種編程語言和框架,Membase具備了很好的複用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程接口,包括可配置的報警信息。 [2] 
Membase的目標是提供對外的線性擴展能力,包括為了增加集羣容量,可以針對統一的節點進行復制。另外,對存儲的數據進行再分配仍然是必要的。 [2] 
這方面的一個有趣特徵是,NoSQL解決方案所承諾的可預測性能,通過如下方式可以獲得: [2] 
1)自動將在線數據遷移到低延遲的存儲介質的技術(內存,固態硬盤,磁盤)。 [2] 
2)可選的寫操作——異步、同步(基於複製,持久化)。 [2] 
3)反向通道再平衡。 [2] 
4)多線程低鎖爭用。 [2] 
5)儘可能使用異步處理。 [2] 
6)自動實現重複數據刪除。 [2] 
7)動態再平衡現有集羣。 [2] 
8)通過把數據複製到多個集羣單元和支持快速失敗轉移來提供系統的高可用性。 [2] 
MongoDB
MongoDB是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫中功能最豐富,最像關係數據庫的。它支持的數據結構非常鬆散,是類似Json的Bjson格式,因此可以存儲比較複雜的數據類型。MongoDB最大的特點是它支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係數據庫單表查詢的絕大部分功能,還支持為數據建立索引。它的特點是高性能、易部署、易使用、存儲數據非常方便。 [2] 
主要功能特性:
1)面向集合存儲,易存儲對象類型的數據。
“面向集合”( Collenction-oriented),意思是數據被分組,存儲在數據集中,被稱為一個集合。每個集合在數據庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型數據庫裏的表,不同的是它不需要定義任何模式( Schema)。 [2] 
2)模式自由。
模式自由,意味着對於存儲在Mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫裏。 [2] 
參考資料
  • 1.    李小華,周毅主編.醫院信息系統數據庫技術與應用:中山大學出版社,2015.10:第399頁
  • 2.    楊旭,湯海京,丁剛毅主編.數據科學導論:北京理工大學出版社,2014.03:第129頁
  • 3.    樊重俊,劉臣,霍良安編著.大數據分析與應用:立信會計出版社,2016.01:第99頁