您好,登錄后才能下訂單哦!
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng)。
(1)鍵值(Key-Value)存儲(chǔ)數(shù)據(jù)庫(kù)
這一類(lèi)數(shù)據(jù)庫(kù)主要會(huì)使用到一個(gè)哈希表,這個(gè)表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)。Key/value模型對(duì)于IT系統(tǒng)來(lái)說(shuō)的優(yōu)勢(shì)在于簡(jiǎn)單、易部署。但是如果DBA只對(duì)部分值進(jìn)行查詢或更新的時(shí)候,Key/value就顯得效率低下了。舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
(2)列存儲(chǔ)數(shù)據(jù)庫(kù)
這部分?jǐn)?shù)據(jù)庫(kù)通常是用來(lái)應(yīng)對(duì)分布式存儲(chǔ)的海量數(shù)據(jù)。鍵仍然存在,但是它們的特點(diǎn)是指向了多個(gè)列。這些列是由列家族來(lái)安排的。如:Cassandra, HBase, Riak.
(3)文檔型數(shù)據(jù)庫(kù)
該類(lèi)型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲(chǔ),比如JSON。文檔型數(shù)據(jù)庫(kù)可以看作是鍵值數(shù)據(jù)庫(kù)的升級(jí)版,允許之間嵌套鍵值。而且文檔型數(shù)據(jù)庫(kù)比鍵值數(shù)據(jù)庫(kù)的查詢效率更高。如:CouchDB, MongoDb. 國(guó)內(nèi)也有文檔型數(shù)據(jù)庫(kù)SequoiaDB,已經(jīng)開(kāi)源。
(4)圖形(Graph)數(shù)據(jù)庫(kù)
圖形結(jié)構(gòu)的數(shù)據(jù)庫(kù)同其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫(kù)不同,它是使用靈活的圖形模型,并且能夠擴(kuò)展到多個(gè)服務(wù)器上。NoSQL數(shù)據(jù)庫(kù)沒(méi)有標(biāo)準(zhǔn)的查詢語(yǔ)言(SQL),因此進(jìn)行數(shù)據(jù)庫(kù)查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫(kù)都有REST式的數(shù)據(jù)接口或者查詢API。[2] 如:Neo4J, InfoGrid, Infinite Graph.
NoSQL數(shù)據(jù)庫(kù)在以下的這幾種情況下比較適用:
1、數(shù)據(jù)模型比較簡(jiǎn)單;
2、需要靈活性更強(qiáng)的IT系統(tǒng);
3、對(duì)數(shù)據(jù)庫(kù)性能要求較高;
4、不需要高度的數(shù)據(jù)一致性;
5、對(duì)于給定key,比較容易映射復(fù)雜值的環(huán)境。
對(duì)于NoSQL并沒(méi)有一個(gè)明確的范圍和定義,但是他們都普遍存在下面一些共同特征:
不需要預(yù)定義模式:不需要事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu)。數(shù)據(jù)中的每條記錄都可能有不同的屬性和格式。當(dāng)插入數(shù)據(jù)時(shí),并不需要預(yù)先定義它們的模式。
無(wú)共享架構(gòu):相對(duì)于將所有數(shù)據(jù)存儲(chǔ)的存儲(chǔ)區(qū)域網(wǎng)絡(luò)中的全共享架構(gòu)。NoSQL往往將數(shù)據(jù)劃分后存儲(chǔ)在各個(gè)本地服務(wù)器上。因?yàn)閺谋镜卮疟P(pán)讀取數(shù)據(jù)的性能往往好于通過(guò)網(wǎng)絡(luò)傳輸讀取數(shù)據(jù)的性能,從而提高了系統(tǒng)的性能。
彈性可擴(kuò)展:可以在系統(tǒng)運(yùn)行的時(shí)候,動(dòng)態(tài)增加或者刪除結(jié)點(diǎn)。不需要停機(jī)維護(hù),數(shù)據(jù)可以自動(dòng)遷移。
分區(qū):相對(duì)于將數(shù)據(jù)存放于同一個(gè)節(jié)點(diǎn),NoSQL數(shù)據(jù)庫(kù)需要將數(shù)據(jù)進(jìn)行分區(qū),將記錄分散在多個(gè)節(jié)點(diǎn)上面。并且通常分區(qū)的同時(shí)還要做復(fù)制。這樣既提高了并行性能,又能保證沒(méi)有單點(diǎn)失效的問(wèn)題。
異步復(fù)制:和RAID存儲(chǔ)系統(tǒng)不同的是,NoSQL中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫(xiě)入一個(gè)節(jié)點(diǎn),而不會(huì)被網(wǎng)絡(luò)傳輸引起遲延。缺點(diǎn)是并不總是能保證一致性,這樣的方式在出現(xiàn)故障的時(shí)候,可能會(huì)丟失少量的數(shù)據(jù)。
BASE:相對(duì)于事務(wù)嚴(yán)格的ACID特性,NoSQL數(shù)據(jù)庫(kù)保證的是BASE特性。BASE是最終一致性和軟事務(wù)。
NoSQL數(shù)據(jù)庫(kù)并沒(méi)有一個(gè)統(tǒng)一的架構(gòu),兩種NoSQL數(shù)據(jù)庫(kù)之間的不同,甚至遠(yuǎn)遠(yuǎn)超過(guò)兩種關(guān)系型數(shù)據(jù)庫(kù)的不同。可以說(shuō),NoSQL各有所長(zhǎng),成功的NoSQL必然特別適用于某些場(chǎng)合或者某些應(yīng)用,在這些場(chǎng)合中會(huì)遠(yuǎn)遠(yuǎn)勝過(guò)關(guān)系型數(shù)據(jù)庫(kù)和其他的NoSQL。
NoSQL數(shù)據(jù)庫(kù)在以下的這幾種情況下比較適用:1、數(shù)據(jù)模型比較簡(jiǎn)單;2、需要靈活性更強(qiáng)的IT系統(tǒng);3、對(duì)數(shù)據(jù)庫(kù)性能要求較高;4、不需要高度的數(shù)據(jù)一致性;5、對(duì)于給定key,比較容易映射復(fù)雜值的環(huán)境。
計(jì)算機(jī)體系結(jié)構(gòu)在數(shù)據(jù)存儲(chǔ)方面要求具備龐大的水平擴(kuò)展性,而NoSQL致力于改變這一現(xiàn)狀。Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型數(shù)據(jù)庫(kù)。
NoSQL項(xiàng)目的名字上看不出什么相同之處,但是,它們通常在某些方面相同:它們可以處理超大量的數(shù)據(jù)。
這場(chǎng)革命仍然需要等待。的確,NoSQL對(duì)大型企業(yè)來(lái)說(shuō)還不是主流,但 是,一兩年之后很可能就會(huì)變個(gè)樣子。在NoSQL運(yùn)動(dòng)的最新一次聚會(huì)中,來(lái)自世界各地的150人擠滿了CBS Interactive的一間會(huì)議室。分享他們?nèi)绾瓮品徛嘿F的關(guān)系數(shù)據(jù)庫(kù)的暴政的經(jīng)驗(yàn),怎樣使用更有效和更便宜的方法來(lái)管理數(shù)據(jù)。
“關(guān)系型數(shù)據(jù)庫(kù)給你強(qiáng)加了太多東西。它們要你強(qiáng)行修改對(duì)象數(shù)據(jù),以滿足RDBMS (relational database management system,關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng))的需要,”在NoSQL擁護(hù)者們看來(lái),基于NoSQL的替代方案“只是給你所需要的”。
水平擴(kuò)展性(horizontal scalability)指能夠連接多個(gè)軟硬件的特性,這樣可以將多個(gè)服務(wù)器從邏輯上看成一個(gè)實(shí)體。
盡管大多數(shù)NoSQL數(shù)據(jù)存儲(chǔ)系統(tǒng)都已被部署于實(shí)際應(yīng)用中,但歸納其研究現(xiàn)狀,還有許多挑戰(zhàn)性問(wèn)題。
已有key-value數(shù)據(jù)庫(kù)產(chǎn)品大多是面向特定應(yīng)用自治構(gòu)建的,缺乏通用性;
已有產(chǎn)品支持的功能有限(不支持事務(wù)特性),導(dǎo)致其應(yīng)用具有一定的局限性;
已有一些研究成果和改進(jìn)的NoSQL數(shù)據(jù)存儲(chǔ)系統(tǒng),但它們都是針對(duì)不同應(yīng)用需求而提出的相應(yīng)解決方案,如支持組內(nèi)事務(wù)特性、彈性事務(wù)等,很少?gòu)娜挚紤]系統(tǒng)的通用性,也沒(méi)有形成系列化的研究成果;
缺乏類(lèi)似關(guān)系數(shù)據(jù)庫(kù)所具有的強(qiáng)有力的理論(如armstrong公理系統(tǒng))、技術(shù)(如成熟的基于啟發(fā)式的優(yōu)化策略、兩段封鎖協(xié)議等)、標(biāo)準(zhǔn)規(guī)范(如SQL語(yǔ)言)的支持。
目前,HBase數(shù)據(jù)庫(kù)時(shí)安全特性最完善的NoSQL數(shù)據(jù)庫(kù)產(chǎn)品之一,而其他的NoSQL數(shù)據(jù)庫(kù)多數(shù)沒(méi)有提供內(nèi)建的安全機(jī)制,但隨著NoSQL的發(fā)展,越來(lái)越多的人開(kāi)始意識(shí)到安全的重要,部分NoSQL產(chǎn)品逐漸開(kāi)始提供一些安全方面的支持。
隨著云計(jì)算、互聯(lián)網(wǎng)等技術(shù)的發(fā)展,大數(shù)據(jù)廣泛存在, 同時(shí)也呈現(xiàn)出了許多云環(huán)境下的新型應(yīng)用,如社交網(wǎng)絡(luò)網(wǎng)、移動(dòng)服務(wù)、協(xié)作編輯等。這些新型應(yīng)用對(duì)海量數(shù)據(jù)管理或稱(chēng)云數(shù)據(jù)管理系統(tǒng)也提出了新的需求,如事務(wù)的 支持、系統(tǒng)的彈性等。同時(shí)云計(jì)算時(shí)代海量數(shù)據(jù)管理系統(tǒng)的設(shè)計(jì)目標(biāo)為可擴(kuò)展性、彈性、容錯(cuò)性、自管理性和“強(qiáng)一致性”。目前,已有系統(tǒng)通過(guò)支持可隨意增減節(jié) 點(diǎn)來(lái)滿足可擴(kuò)展性;通過(guò)副本策略保證系統(tǒng)的容錯(cuò)性;基于監(jiān)測(cè)的狀態(tài)消息協(xié)調(diào)實(shí)現(xiàn)系統(tǒng)的自管理性。“彈性”的目標(biāo)是滿足Pay-per-use 模型,以提高系統(tǒng)資源的利用率。該特性是已有典型NoSQL數(shù)據(jù)庫(kù)系統(tǒng)所不完善的,但卻是云系統(tǒng)應(yīng)具有的典型特點(diǎn);“強(qiáng)一致性”主要是新應(yīng)用的需求。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。