一分鐘了解-Nosql
NoSQL,泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在處理web2.0網站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網站已經顯得力不從心,出現了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數據庫的產生就是為了解決大規(guī)模數據集合多重數據種類帶來的挑戰(zhàn),尤其是大數據應用難題。
基本含義
NoSQL最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL僅僅是一個[概念],泛指非關系型的數據庫,區(qū)別于關系數據庫,它們不保證關系數據的ACID特性。NoSQL是一項全新的數據庫革命性運動,其擁護者們提倡運用非關系型的數據存儲,相對于鋪天蓋地的關系型數據庫運用,這一概念無疑是一種全新的思維的注入。
NoSQL有如下優(yōu)點:易擴展,NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。數據之間無關系,這樣就非常容易擴展。無形之間也在架構的層面上帶來了可擴展的能力。大數據量,高性能,NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優(yōu)秀。這得益于它的無關系性,數據庫的結構簡單。
分類
鍵值(Key-Value)存儲數據庫
這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對于IT系統來說的優(yōu)勢在于簡單、易部署。但是如果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舉例 | 典型應用場景 | 數據模型 | 優(yōu)點 | 缺點 |
鍵值(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數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優(yōu)秀。這得益于它的無關系性,數據庫的結構簡單。一般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),層次之間相輔相成,協調工作。
數據持久層定義了數據的存儲形式,主要包括基于內存、基于硬盤、內存和硬盤接口、訂制可拔插四種形式?;趦却嫘问降臄祿嫒∷俣茸羁?,但可能會造成數據丟失?;谟脖P的數據存儲可能保存很久,但存取速度較基于內存形式的慢。內存和硬盤相結合的形式,結合了前兩種形式的優(yōu)點,既保證了速度,又保證了數據不丟失。訂制可拔插則保證了數據存取具有較高的靈活性。
數據分布層定義了數據是如何分布的,相對于關系型數據庫,NoSQL可選的機制比較多,主要有三種形式:一是CAP支持,可用于水平擴展。二是多數據中心支持,可以保證在橫跨多數據中心是也能夠平穩(wěn)運行。三是動態(tài)部署支持,可以在運行著的集群中動態(tài)地添加或刪除節(jié)點。
數據邏輯層表述了數據的邏輯變現形式,與關系型數據庫相比,NoSQL在邏輯表現形式上相當靈活,主要有四種形式:一是鍵值模型,這種模型在表現形式上比較單一,但卻有很強的擴展性。二是列式模型,這種模型相比于鍵值模型能夠支持較為復雜的數據,但擴展性相對較差。三是文檔模型,這種模型對于復雜數據的支持和擴展性都有很大優(yōu)勢。四是圖模型,這種模型的使用場景不多,通常是基于圖數據結構的數據定制的。
接口層為上層應用提供了方便的數據調用接口,提供的選擇遠多于關系型數據庫。接口層提供了五種選擇:Rest,Thrift,Map/Reduce,Get/Put,特定語言API,使得應用程序和數據庫的交互更加方便。 [4]
NoSQL分層架構并不代表每個產品在每一層只有一種選擇。相反,這種分層設計提供了很大的靈活性和兼容性,每種數據庫在不同層面可以支持多種特性。
適用場景
NoSQL數據庫在以下的這幾種情況下比較適用:
1、數據模型比較簡單;
2、需要靈活性更強的IT系統;
3、對數據庫性能要求較高;
4、不需要高度的數據一致性;
5、對于給定key,比較容易映射復雜值的環(huán)境。
好啦!今天的分享到這里就結束了,希望大家持續(xù)關注馬哥教育官網,每天都會有大量優(yōu)質內容與大家分享!
聲明:文章轉載于網絡,版權歸原作者所有!