基本含義NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項全新的數(shù)據(jù)庫革命性運(yùn)動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲,相對于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。NoSQLNoSQL數(shù)據(jù)庫的四大分類鍵值(Key-Value)存儲數(shù)據(jù)庫這一類數(shù)據(jù)庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù)。Key/value模型對于IT系統(tǒng)來說的優(yōu)勢在于簡單、易部署。但是如果DBA只對部分值進(jìn)行查詢或更新的時候,Key/value就顯得效率低下了。[3] 舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.列存儲數(shù)據(jù)庫。這部分?jǐn)?shù)據(jù)庫通常是用來應(yīng)對分布式存儲的海量數(shù)據(jù)。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.文檔型數(shù)據(jù)庫文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的,而且它同第一種鍵值存儲相類似。該類型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲,比如JSON。文檔型數(shù)據(jù)庫可 以看作是鍵值數(shù)據(jù)庫的升級版,允許之間嵌套鍵值。而且文檔型數(shù)據(jù)庫比鍵值數(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ò)展到多個服務(wù)器上。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API。[2] 如:Neo4J, InfoGrid, Infinite Graph.因此,我們總結(jié)NoSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:1、數(shù)據(jù)模型比較簡單;2、需要靈活性更強(qiáng)的IT系統(tǒng);3、對數(shù)據(jù)庫性能要求較高;4、不需要高度的數(shù)據(jù)一致性;5、對于給定key,比較容易映射復(fù)雜值的環(huán)境。
專注于為中小企業(yè)提供做網(wǎng)站、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)察哈爾右翼中旗免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
一般將NoSQL數(shù)據(jù)庫分為四大類:鍵值(Key-Value)存儲數(shù)據(jù)庫、列存儲數(shù)據(jù)庫、文檔型數(shù)據(jù)庫和圖形(Graph)數(shù)據(jù)庫。它們的數(shù)據(jù)模型、優(yōu)缺點、典型應(yīng)用場景。
鍵值(Key-Value)存儲數(shù)據(jù)庫Key指向Value的鍵值對,通常用hash表來實現(xiàn)查找速度快數(shù)據(jù)無結(jié)構(gòu)化(通常只被當(dāng)作字符串或者二進(jìn)制數(shù)據(jù))內(nèi)容緩存,主要用于處理大量數(shù)據(jù)的高訪問負(fù)載,也用于一些日志系統(tǒng)等。
列存儲數(shù)據(jù)庫,以列簇式存儲,將同一列數(shù)據(jù)存在一起查找速度快,可擴(kuò)展性強(qiáng),更容易進(jìn)行分布式擴(kuò)展功能相對局限分布式的文件系統(tǒng)。
文檔型數(shù)據(jù)庫,Key-Value對應(yīng)的鍵值對,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)一的查詢語法,Web應(yīng)用。
圖形(Graph)數(shù)據(jù)庫,圖結(jié)構(gòu),利用圖結(jié)構(gòu)相關(guān)算法(如最短路徑尋址,N度關(guān)系查找等),很多時候需要對整個圖做計算才能得出需要的信息,而且這種結(jié)構(gòu)不太好做分布式的集群方案,社交網(wǎng)絡(luò),推薦系統(tǒng)等。
NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。
鍵值(Key-Value)存儲數(shù)據(jù)庫
這一類數(shù)據(jù)庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù)。Key/value模型對于IT系統(tǒng)來說的優(yōu)勢在于簡單、易部署。但是如果DBA只對部分值進(jìn)行查詢或更新的時候,Key/value就顯得效率低下了。[3] 舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存儲數(shù)據(jù)庫。
這部分?jǐn)?shù)據(jù)庫通常是用來應(yīng)對分布式存儲的海量數(shù)據(jù)。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.
文檔型數(shù)據(jù)庫
文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的,而且它同第一種鍵值存儲相類似。該類型的數(shù)據(jù)模型是版本化的文檔,半結(jié)構(gòu)化的文檔以特定的格式存儲,比如JSON。文檔型數(shù)據(jù)庫可 以看作是鍵值數(shù)據(jù)庫的升級版,允許之間嵌套鍵值。而且文檔型數(shù)據(jù)庫比鍵值數(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ò)展到多個服務(wù)器上。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API。[2] 如:Neo4J, InfoGrid, Infinite Graph.
因此,我們總結(jié)NoSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:1、數(shù)據(jù)模型比較簡單;2、需要靈活性更強(qiáng)的IT系統(tǒng);3、對數(shù)據(jù)庫性能要求較高;4、不需要高度的數(shù)據(jù)一致性;5、對于給定key,比較容易映射復(fù)雜值的環(huán)境。
NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的
SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。
NoSQL(NoSQL
= Not Only SQL
),意即“不僅僅是SQL”,是一項全新的數(shù)據(jù)庫革命性運(yùn)動,早期就有人提出,發(fā)展至2009年趨勢越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)
據(jù)存儲,相對于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。
從這一新興技術(shù)中選擇一款正確的NoSQL數(shù)據(jù)庫是非常具有挑戰(zhàn)性的。比一下網(wǎng)建議在選擇時考慮以下因素:
并發(fā)控制
并
發(fā)控制指的是當(dāng)多個用戶同時更新運(yùn)行時,用于保護(hù)數(shù)據(jù)庫完整性的各種技術(shù)。并發(fā)機(jī)制不正確可能導(dǎo)致臟讀、幻讀和不可重復(fù)讀等此類問題。并發(fā)控制的目的是保
證一個用戶的工作不會對另一個用戶的工作產(chǎn)生不合理的影響。在某些情況下,這些措施保證了當(dāng)用戶和其他用戶一起操作時,所得的結(jié)果和她單獨操作時的結(jié)果是
一樣的。在另一些情況下,這表示用戶的工作按預(yù)定的方式受其他用戶的影響。
封鎖
就是事務(wù)T在對某個數(shù)據(jù)對象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。
封鎖是一次只允許一個用戶讀取或修改的一種機(jī)制,是實現(xiàn)并發(fā)控制的一個非常重要的技術(shù)。
MVCC
Multi-Version Concurrency Control多版本并發(fā)控制,維持一個數(shù)據(jù)的多個版本使讀寫操作沒有沖突。MVCC優(yōu)化了數(shù)據(jù)庫并發(fā)系統(tǒng),使系統(tǒng)在有大量并發(fā)用戶時得到最高的性能,并且可以不用關(guān)閉服務(wù)器就直接進(jìn)行熱備份。
ACID
指
數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久
性(Durability)。一個支持事務(wù)(Transaction)的數(shù)據(jù)庫系統(tǒng),必需要具有這四種特性,否則在事務(wù)過程(Transaction
processing)當(dāng)中無法保證數(shù)據(jù)的正確性,交易過程極可能達(dá)不到交易方的要求。
None
一些系統(tǒng)不提供原子性。
鏡像
數(shù)據(jù)庫鏡像是DBMS根據(jù)DBA的要求,自動把整個數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個磁盤上,每當(dāng)主數(shù)據(jù)庫更新時,DBMS會自動把更新后的數(shù)據(jù)復(fù)制過去,即DBMS自動保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性。
鏡像分為同步和異步。
數(shù)據(jù)存儲
指的是數(shù)據(jù)的物理特性怎樣被存儲在數(shù)據(jù)庫中。
磁盤 數(shù)據(jù)被存儲在硬盤驅(qū)動器里;
GFS或谷歌文件系統(tǒng)是一個由谷歌開發(fā)的專有的分布式文件系統(tǒng);
Hadoop是Apache軟件框架,免費(fèi)許可下支持?jǐn)?shù)據(jù)密集型分布式應(yīng)用程序;
RAM隨機(jī)存儲器;
插件 可以添加外部插件;
Amazon S3通過Web服務(wù)接口提供存儲;
BDB:BDB
全稱是 “Berkeley DB”,它是MySQL具有事務(wù)能力的表類型,由Sleepycat
Software開發(fā)。BDB表類型提供了MySQL用戶長久期盼的功能,即事務(wù)控制能力。在任何RDBMS中,事務(wù)控制能力都是一種極其重要和寶貴的功
能。事務(wù)控制能力使得我們能夠確保一組命令確實已經(jīng)全部執(zhí)行成功,或者確保當(dāng)任何一個命令出現(xiàn)錯誤時所有命令的執(zhí)行結(jié)果均被退回。
實現(xiàn)語言
實現(xiàn)語言會影響數(shù)據(jù)庫的發(fā)展速度。典型的NoSQL數(shù)據(jù)庫是用低級語言如C / C + +編寫的。另一方面,那些更高層次的語言如Java,使自定義更容易。
實現(xiàn)語言有:C, C++, Erlang, Java, Python
特性
考慮下列哪一個特點對你的數(shù)據(jù)庫是最重要的:
持久性
可用性
一致性
分區(qū)容忍性
證書類型
下面這些許可證是一個不同的開放源碼許可的形式:
GPL:通用公共許可證
BSD:伯克利軟件分發(fā)
MPL:Mozilla公共許可證
EPL:Eclipse公共許可證
IDPL:最初的開發(fā)者的公共許可證
LGPL:較寬松通用公共許可證
存儲類型
存儲類型是NoSQL數(shù)據(jù)庫最大的不同,是決定使用哪款數(shù)據(jù)庫的一個首要指標(biāo)。
關(guān)鍵字:支持get、put和刪除操作
按列存儲:相對于傳統(tǒng)的按行存儲,數(shù)據(jù)集成容易多了
面向文件系統(tǒng):存儲像是JSON或XML這樣的結(jié)構(gòu)化文件,很容易就能從面向?qū)ο筌浖蝎@取數(shù)據(jù)。