基本含義,分類,鍵值(Key-Value)存儲資料庫,列存儲資料庫,文檔型資料庫,圖形(Graph)資料庫,不同分類特點對比,特點,易擴展,大數據量,高性能,靈活的數據模型,高可用,體系框架,適用場景,開源的NoSQL資料庫軟體,Membase,MongoDB,
基本含義
NoSQL最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL僅僅是一個概念,泛指非關係型的資料庫,區別於
關係資料庫,它們不保證關係數據的ACID特性。NoSQL是一項全新的資料庫革命性運動,其擁護者們提倡運用非關係型的
數據存儲,相對於鋪天蓋地的關係型資料庫運用,這一概念無疑是一種全新的思維的注入。
NoSQL有如下優點:易
擴展,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。
不同分類特點對比
分類 | 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資料庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關係性,資料庫的結構簡單。一般MySQL使用Query Cache。NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說性能就要高很多。
靈活的數據模型
NoSQL無須事先為要存儲的數據建立欄位,隨時可以存儲自定義的數據格式。而在關係資料庫里,增刪欄位是一件非常麻煩的事情。如果是非常大數據量的表,增加欄位簡直就是——個噩夢。這點在大數據量的Web 2.0時代尤其明顯。
高可用
NoSQL在不太影響性能的情況,就可以方便地實現高可用的架構。比如Cassandra、HBase模型,通過複製模型也能實現高可用。
體系框架
NoSQL框架體系NosoL整體框架分為四層,由下至上分為數據持久層(data persistence)、整體分布層(data distribution model)、數據邏輯模型層(data logical model)、和接口層(interface),層次之間相輔相成,協調工作。
數據持久層定義了數據的存儲形式,主要包括基於記憶體、基於硬碟、記憶體和硬碟接口、訂製可拔插四種形式。基於記憶體形式的數據存取速度最快,但可能會造成數據丟失。基於硬碟的數據存儲可能保存很久,但存取速度較基於記憶體形式的慢。記憶體和硬碟相結合的形式,結合了前兩種形式的優點,既保證了速度,又保證了數據不丟失。訂製可拔插則保證了數據存取具有較高的靈活性。
數據分布層定義了數據是如何分布的,相對於關係型資料庫,NoSQL可選的機制比較多,主要有三種形式:一是CAP支持,可用於水平擴展。二是多數據中心支持,可以保證在橫跨多數據中心是也能夠平穩運行。三是動態部署支持,可以在運行著的集群中動態地添加或刪除節點。
數據邏輯層表述了數據的邏輯變現形式,與關係型資料庫相比,NoSQL在邏輯表現形式上相當靈活,主要有四種形式:一是鍵值模型,這種模型在表現形式上比較單一,但卻有很強的擴展性。二是列式模型,這種模型相比於鍵值模型能夠支持較為複雜的數據,但擴展性相對較差。三是文檔模型,這種模型對於複雜數據的支持和擴展性都有很大優勢。四是圖模型,這種模型的使用場景不多,通常是基於圖數據結構的數據定製的。
接口層為上層套用提供了方便的數據調用接口,提供的選擇遠多於關係型資料庫。接口層提供了五種選擇:Rest,Thrift,Map/Reduce,Get/Put,特定語言API,使得應用程式和資料庫的互動更加方便。
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這兩個主要貢獻者,這兩個組織都是很大的線上遊戲和社區網路空間供應商。
Membase容易安裝、操作,可以從單節點方便地擴展到集群,而且為Memcached(有線協定的兼容性)實現了即插即用功能,在套用方面為開發者和經營者提供了一個較低的門檻。作為快取解決方案,Memcached已經在不同類型的領域(特別是大容量的Web套用)有了廣泛的使用,其中Memcached的部分基礎代碼被直接套用到了Membase伺服器的前端。
通過兼容多種程式語言和框架,Membase具備了很好的復用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程接口,包括可配置的報警信息。
Membase的目標是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統一的節點進行複製。另外,對存儲的數據進行再分配仍然是必要的。
這方面的一個有趣特徵是,NoSQL解決方案所承諾的可預測性能,通過如下方式可以獲得:
1)自動將線上數據遷移到低延遲的存儲介質的技術(記憶體,固態硬碟,磁碟)。
2)可選的寫操作——異步、同步(基於複製,持久化)。
3)反向通道再平衡。
4)多執行緒低鎖爭用。
5)儘可能使用異步處理。
6)自動實現重複數據刪除。
7)動態再平衡現有集群。
8)通過把數據複製到多個集群單元和支持快速失敗轉移來提供系統的高可用性。
MongoDB
MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫中功能最豐富,最像關係資料庫的。它支持的
數據結構非常鬆散,是類似Json的Bjson格式,因此可以存儲比較複雜的數據類型。MongoDB最大的特點是它支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,還支持為數據建立索引。它的特點是高性能、易部署、易使用、存儲數據非常方便。
主要功能特性:
1)面向集合存儲,易存儲對象類型的數據。
“面向集合”( Collenction-oriented),意思是數據被分組,存儲在數據集中,被稱為一個集合。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型資料庫里的表,不同的是它不需要定義任何模式( Schema)。
2)模式自由。
模式自由,意味著對於存儲在Mongodb資料庫中的檔案,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案存儲在同一個資料庫里。