一分鐘了解-Nosql
NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在處理web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,出現(xiàn)了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。
基本含義
NoSQL最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL僅僅是一個(gè)[概念],泛指非關(guān)系型的數(shù)據(jù)庫,區(qū)別于關(guān)系數(shù)據(jù)庫,它們不保證關(guān)系數(shù)據(jù)的ACID特性。NoSQL是一項(xiàng)全新的數(shù)據(jù)庫革命性運(yùn)動(dòng),其擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。
NoSQL有如下優(yōu)點(diǎn):易擴(kuò)展,NoSQL數(shù)據(jù)庫種類繁多,但是一個(gè)共同的特點(diǎn)都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性。數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴(kuò)展。無形之間也在架構(gòu)的層面上帶來了可擴(kuò)展的能力。大數(shù)據(jù)量,高性能,NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡(jiǎn)單。
分類
鍵值(Key-Value)存儲(chǔ)數(shù)據(jù)庫
這一類數(shù)據(jù)庫主要會(huì)使用到一個(gè)哈希表,這個(gè)表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)。Key/value模型對(duì)于IT系統(tǒng)來說的優(yōu)勢(shì)在于簡(jiǎn)單、易部署。但是如果DBA只對(duì)部分值進(jìn)行查詢或更新的時(shí)候,Key/value就顯得效率低下了。舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。
列存儲(chǔ)數(shù)據(jù)庫
這部分?jǐn)?shù)據(jù)庫通常是用來應(yīng)對(duì)分布式存儲(chǔ)的海量數(shù)據(jù)。鍵仍然存在,但是它們的特點(diǎn)是指向了多個(gè)列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.
文檔型數(shù)據(jù)庫
文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的,而且它同第一種鍵值存儲(chǔ)相類似。該類型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲(chǔ),比如JSON。文檔型數(shù)據(jù)庫可以看作是鍵值數(shù)據(jù)庫的升級(jí)版,允許之間嵌套鍵值,在處理網(wǎng)頁等復(fù)雜數(shù)據(jù)時(shí),文檔型數(shù)據(jù)庫比傳統(tǒng)鍵值數(shù)據(jù)庫的查詢效率更高。如:CouchDB, MongoDb. 國內(nèi)也有文檔型數(shù)據(jù)庫SequoiaDB,已經(jīng)開源。
圖形(Graph)數(shù)據(jù)庫
圖形結(jié)構(gòu)的數(shù)據(jù)庫同其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫不同,它是使用靈活的圖形模型,并且能夠擴(kuò)展到多個(gè)服務(wù)器上。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API。如:Neo4J, InfoGrid, Infinite Graph。
不同分類特點(diǎn)對(duì)比
分類 | Examples舉例 | 典型應(yīng)用場(chǎng)景 | 數(shù)據(jù)模型 | 優(yōu)點(diǎn) | 缺點(diǎn) |
鍵值(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 內(nèi)容緩存,主要用于處理大量數(shù)據(jù)的高訪問負(fù)載,也用于一些日志系統(tǒng)等等。 | Key 指向 Value 的鍵值對(duì),通常用hash table來實(shí)現(xiàn) | 查找速度快 | 數(shù)據(jù)無結(jié)構(gòu)化,通常只被當(dāng)作字符串或者二進(jìn)制數(shù)據(jù) |
列存儲(chǔ)數(shù)據(jù)庫 | Cassandra, HBase, Riak | 分布式的文件系統(tǒng) | 以列簇式存儲(chǔ),將同一列數(shù)據(jù)存在一起 | 查找速度快,可擴(kuò)展性強(qiáng),更容易進(jìn)行分布式擴(kuò)展 | 功能相對(duì)局限 |
文檔型數(shù)據(jù)庫 | CouchDB, MongoDb | Web應(yīng)用(與Key-Value類似,Value是結(jié)構(gòu)化的,不同的是數(shù)據(jù)庫能夠了解Value的內(nèi)容) | Key-Value對(duì)應(yīng)的鍵值對(duì),Value為結(jié)構(gòu)化數(shù)據(jù) | 數(shù)據(jù)結(jié)構(gòu)要求不嚴(yán)格,表結(jié)構(gòu)可變,不需要像關(guān)系型數(shù)據(jù)庫一樣需要預(yù)先定義表結(jié)構(gòu) | 查詢性能不高,而且缺乏統(tǒng)一的查詢語法。 |
圖形(Graph)數(shù)據(jù)庫 | Neo4J, InfoGrid, Infinite Graph | 社交網(wǎng)絡(luò),推薦系統(tǒng)等。專注于構(gòu)建關(guān)系圖譜 | 圖結(jié)構(gòu) | 利用圖結(jié)構(gòu)相關(guān)算法。比如最短路徑尋址,N度關(guān)系查找等 | 很多時(shí)候需要對(duì)整個(gè)圖做計(jì)算才能得出需要的信息,而且這種結(jié)構(gòu)不太好做分布式的集群方案。 |
特點(diǎn)
對(duì)于NoSQL并沒有一個(gè)明確的范圍和定義,但是他們都普遍存在下面一些共同特征:
易擴(kuò)展
NoSQL數(shù)據(jù)庫種類繁多,但是一個(gè)共同的特點(diǎn)都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性。數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴(kuò)展。無形之間,在架構(gòu)的層面上帶來了可擴(kuò)展的能力。
大數(shù)據(jù)量,高性能
NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡(jiǎn)單。一般MySQL使用Query Cache。NoSQL的Cache是記錄級(jí)的,是一種細(xì)粒度的Cache,所以NoSQL在這個(gè)層面上來說性能就要高很多。
靈活的數(shù)據(jù)模型
NoSQL無須事先為要存儲(chǔ)的數(shù)據(jù)建立字段,隨時(shí)可以存儲(chǔ)自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡(jiǎn)直就是——個(gè)噩夢(mèng)。這點(diǎn)在大數(shù)據(jù)量的Web 2.0時(shí)代尤其明顯。
高可用
NoSQL在不太影響性能的情況,就可以方便地實(shí)現(xiàn)高可用的架構(gòu)。比如Cassandra、HBase模型,通過復(fù)制模型也能實(shí)現(xiàn)高可用。
體系框架
NoSQL框架體系NosoL整體框架分為四層,由下至上分為數(shù)據(jù)持久層(data persistence)、整體分布層(data distribution model)、數(shù)據(jù)邏輯模型層(data logical model)、和接口層(interface),層次之間相輔相成,協(xié)調(diào)工作。
數(shù)據(jù)持久層定義了數(shù)據(jù)的存儲(chǔ)形式,主要包括基于內(nèi)存、基于硬盤、內(nèi)存和硬盤接口、訂制可拔插四種形式?;趦?nèi)存形式的數(shù)據(jù)存取速度最快,但可能會(huì)造成數(shù)據(jù)丟失?;谟脖P的數(shù)據(jù)存儲(chǔ)可能保存很久,但存取速度較基于內(nèi)存形式的慢。內(nèi)存和硬盤相結(jié)合的形式,結(jié)合了前兩種形式的優(yōu)點(diǎn),既保證了速度,又保證了數(shù)據(jù)不丟失。訂制可拔插則保證了數(shù)據(jù)存取具有較高的靈活性。
數(shù)據(jù)分布層定義了數(shù)據(jù)是如何分布的,相對(duì)于關(guān)系型數(shù)據(jù)庫,NoSQL可選的機(jī)制比較多,主要有三種形式:一是CAP支持,可用于水平擴(kuò)展。二是多數(shù)據(jù)中心支持,可以保證在橫跨多數(shù)據(jù)中心是也能夠平穩(wěn)運(yùn)行。三是動(dòng)態(tài)部署支持,可以在運(yùn)行著的集群中動(dòng)態(tài)地添加或刪除節(jié)點(diǎn)。
數(shù)據(jù)邏輯層表述了數(shù)據(jù)的邏輯變現(xiàn)形式,與關(guān)系型數(shù)據(jù)庫相比,NoSQL在邏輯表現(xiàn)形式上相當(dāng)靈活,主要有四種形式:一是鍵值模型,這種模型在表現(xiàn)形式上比較單一,但卻有很強(qiáng)的擴(kuò)展性。二是列式模型,這種模型相比于鍵值模型能夠支持較為復(fù)雜的數(shù)據(jù),但擴(kuò)展性相對(duì)較差。三是文檔模型,這種模型對(duì)于復(fù)雜數(shù)據(jù)的支持和擴(kuò)展性都有很大優(yōu)勢(shì)。四是圖模型,這種模型的使用場(chǎng)景不多,通常是基于圖數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)定制的。
接口層為上層應(yīng)用提供了方便的數(shù)據(jù)調(diào)用接口,提供的選擇遠(yuǎn)多于關(guān)系型數(shù)據(jù)庫。接口層提供了五種選擇:Rest,Thrift,Map/Reduce,Get/Put,特定語言API,使得應(yīng)用程序和數(shù)據(jù)庫的交互更加方便。 [4]
NoSQL分層架構(gòu)并不代表每個(gè)產(chǎn)品在每一層只有一種選擇。相反,這種分層設(shè)計(jì)提供了很大的靈活性和兼容性,每種數(shù)據(jù)庫在不同層面可以支持多種特性。
適用場(chǎng)景
NoSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:
1、數(shù)據(jù)模型比較簡(jiǎn)單;
2、需要靈活性更強(qiáng)的IT系統(tǒng);
3、對(duì)數(shù)據(jù)庫性能要求較高;
4、不需要高度的數(shù)據(jù)一致性;
5、對(duì)于給定key,比較容易映射復(fù)雜值的環(huán)境。
好啦!今天的分享到這里就結(jié)束了,希望大家持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會(huì)有大量?jī)?yōu)質(zhì)內(nèi)容與大家分享!
聲明:文章轉(zhuǎn)載于網(wǎng)絡(luò),版權(quán)歸原作者所有!