特點(diǎn):
我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、南澗ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的南澗網(wǎng)站制作公司
它們可以處理超大量的數(shù)據(jù)。
它們運(yùn)行在便宜的PC服務(wù)器集群上。
PC集群擴(kuò)充起來(lái)非常方便并且成本很低,避免了“sharding”操作的復(fù)雜性和成本。
它們擊碎了性能瓶頸。
NoSQL的支持者稱,通過(guò)NoSQL架構(gòu)可以省去將Web或Java應(yīng)用和數(shù)據(jù)轉(zhuǎn)換成SQL友好格式的時(shí)間,執(zhí)行速度變得更快。
“SQL并非適用于所有的程序代碼,” 對(duì)于那些繁重的重復(fù)操作的數(shù)據(jù),SQL值得花錢。但是當(dāng)數(shù)據(jù)庫(kù)結(jié)構(gòu)非常簡(jiǎn)單時(shí),SQL可能沒(méi)有太大用處。
沒(méi)有過(guò)多的操作。
雖然NoSQL的支持者也承認(rèn)關(guān)系數(shù)據(jù)庫(kù)提供了無(wú)可比擬的功能集合,而且在數(shù)據(jù)完整性上也發(fā)揮絕對(duì)穩(wěn)定,他們同時(shí)也表示,企業(yè)的具體需求可能沒(méi)有那么多。
Bootstrap支持
因?yàn)镹oSQL項(xiàng)目都是開(kāi)源的,因此它們?nèi)狈?yīng)商提供的正式支持。這一點(diǎn)它們與大多數(shù)開(kāi)源項(xiàng)目一樣,不得不從社區(qū)中尋求支持。
優(yōu)點(diǎn):
易擴(kuò)展
NoSQL數(shù)據(jù)庫(kù)種類繁多,但是一個(gè)共同的特點(diǎn)都是去掉關(guān)系數(shù)據(jù)庫(kù)的關(guān)系型特性。數(shù)據(jù)之間無(wú)關(guān)系,這樣就非常容易擴(kuò)展。也無(wú)形之間,在架構(gòu)的層面上帶來(lái)了可擴(kuò)展的能力。
大數(shù)據(jù)量,高性能
NoSQL數(shù)據(jù)庫(kù)都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無(wú)關(guān)系性,數(shù)據(jù)庫(kù)的結(jié)構(gòu)簡(jiǎn)單。一般MySQL使用 Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對(duì)web2.0的交互頻繁的應(yīng)用,Cache性能不高。而NoSQL的 Cache是記錄級(jí)的,是一種細(xì)粒度的Cache,所以NoSQL在這個(gè)層面上來(lái)說(shuō)就要性能高很多了。
靈活的數(shù)據(jù)模型
NoSQL無(wú)需事先為要存儲(chǔ)的數(shù)據(jù)建立字段,隨時(shí)可以存儲(chǔ)自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫(kù)里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡(jiǎn)直就是一個(gè)噩夢(mèng)。這點(diǎn)在大數(shù)據(jù)量的web2.0時(shí)代尤其明顯。
高可用
NoSQL在不太影響性能的情況,就可以方便的實(shí)現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase模型,通過(guò)復(fù)制模型也能實(shí)現(xiàn)高可用。
主要應(yīng)用:
Apache HBase
這個(gè)大數(shù)據(jù)管理平臺(tái)建立在谷歌強(qiáng)大的BigTable管理引擎基礎(chǔ)上。作為具有開(kāi)源、Java編碼、分布式多個(gè)優(yōu)勢(shì)的數(shù)據(jù)庫(kù),Hbase最初被設(shè)計(jì)應(yīng)用于Hadoop平臺(tái),而這一強(qiáng)大的數(shù)據(jù)管理工具,也被Facebook采用,用于管理消息平臺(tái)的龐大數(shù)據(jù)。
Apache Storm
用于處理高速、大型數(shù)據(jù)流的分布式實(shí)時(shí)計(jì)算系統(tǒng)。Storm為Apache Hadoop添加了可靠的實(shí)時(shí)數(shù)據(jù)處理功能,同時(shí)還增加了低延遲的儀表板、安全警報(bào),改進(jìn)了原有的操作方式,幫助企業(yè)更有效率地捕獲商業(yè)機(jī)會(huì)、發(fā)展新業(yè)務(wù)。
Apache Spark
該技術(shù)采用內(nèi)存計(jì)算,從多迭代批量處理出發(fā),允許將數(shù)據(jù)載入內(nèi)存做反復(fù)查詢,此外還融合數(shù)據(jù)倉(cāng)庫(kù)、流處理和圖計(jì)算等多種計(jì)算范式,Spark用Scala語(yǔ)言實(shí)現(xiàn),構(gòu)建在HDFS上,能與Hadoop很好的結(jié)合,而且運(yùn)行速度比MapReduce快100倍。
Apache Hadoop
該技術(shù)迅速成為了大數(shù)據(jù)管理標(biāo)準(zhǔn)之一。當(dāng)它被用來(lái)管理大型數(shù)據(jù)集時(shí),對(duì)于復(fù)雜的分布式應(yīng)用,Hadoop體現(xiàn)出了非常好的性能,平臺(tái)的靈活性使它可以運(yùn)行在商用硬件系統(tǒng),它還可以輕松地集成結(jié)構(gòu)化、半結(jié)構(gòu)化和甚至非結(jié)構(gòu)化數(shù)據(jù)集。
Apache Drill
你有多大的數(shù)據(jù)集?其實(shí)無(wú)論你有多大的數(shù)據(jù)集,Drill都能輕松應(yīng)對(duì)。通過(guò)支持HBase、Cassandra和MongoDB,Drill建立了交互式分析平臺(tái),允許大規(guī)模數(shù)據(jù)吞吐,而且能很快得出結(jié)果。
Apache Sqoop
也許你的數(shù)據(jù)現(xiàn)在還被鎖定于舊系統(tǒng)中,Sqoop可以幫你解決這個(gè)問(wèn)題。這一平臺(tái)采用并發(fā)連接,可以將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)方便地轉(zhuǎn)移到Hadoop中,可以自定義數(shù)據(jù)類型以及元數(shù)據(jù)傳播的映射。事實(shí)上,你還可以將數(shù)據(jù)(如新的數(shù)據(jù))導(dǎo)入到HDFS、Hive和Hbase中。
Apache Giraph
這是功能強(qiáng)大的圖形處理平臺(tái),具有很好可擴(kuò)展性和可用性。該技術(shù)已經(jīng)被Facebook采用,Giraph可以運(yùn)行在Hadoop環(huán)境中,可以將它直接部署到現(xiàn)有的Hadoop系統(tǒng)中。通過(guò)這種方式,你可以得到強(qiáng)大的分布式作圖能力,同時(shí)還能利用上現(xiàn)有的大數(shù)據(jù)處理引擎。
Cloudera Impala
Impala模型也可以部署在你現(xiàn)有的Hadoop群集上,監(jiān)視所有的查詢。該技術(shù)和MapReduce一樣,具有強(qiáng)大的批處理能力,而且Impala對(duì)于實(shí)時(shí)的SQL查詢也有很好的效果,通過(guò)高效的SQL查詢,你可以很快的了解到大數(shù)據(jù)平臺(tái)上的數(shù)據(jù)。
Gephi
它可以用來(lái)對(duì)信息進(jìn)行關(guān)聯(lián)和量化處理,通過(guò)為數(shù)據(jù)創(chuàng)建功能強(qiáng)大的可視化效果,你可以從數(shù)據(jù)中得到不一樣的洞察力。Gephi已經(jīng)支持多個(gè)圖表類型,而且可以在具有上百萬(wàn)個(gè)節(jié)點(diǎn)的大型網(wǎng)絡(luò)上運(yùn)行。Gephi具有活躍的用戶社區(qū),Gephi還提供了大量的插件,可以和現(xiàn)有系統(tǒng)完美的集成到一起,它還可以對(duì)復(fù)雜的IT連接、分布式系統(tǒng)中各個(gè)節(jié)點(diǎn)、數(shù)據(jù)流等信息進(jìn)行可視化分析。
MongoDB
這個(gè)堅(jiān)實(shí)的平臺(tái)一直被很多組織推崇,它在大數(shù)據(jù)管理上有極好的性能。MongoDB最初是由DoubleClick公司的員工創(chuàng)建,現(xiàn)在該技術(shù)已經(jīng)被廣泛的應(yīng)用于大數(shù)據(jù)管理。MongoDB是一個(gè)應(yīng)用開(kāi)源技術(shù)開(kāi)發(fā)的NoSQL數(shù)據(jù)庫(kù),可以用于在JSON這樣的平臺(tái)上存儲(chǔ)和處理數(shù)據(jù)。目前,紐約時(shí)報(bào)、Craigslist以及眾多企業(yè)都采用了MongoDB,幫助他們管理大型數(shù)據(jù)集。(Couchbase服務(wù)器也作為一個(gè)參考)。
十大頂尖公司:
Amazon Web Services
Forrester將AWS稱為“云霸主”,談到云計(jì)算領(lǐng)域的大數(shù)據(jù),那就不得不提到亞馬遜。該公司的Hadoop產(chǎn)品被稱為EMR(Elastic Map Reduce),AWS解釋這款產(chǎn)品采用了Hadoop技術(shù)來(lái)提供大數(shù)據(jù)管理服務(wù),但它不是純開(kāi)源Hadoop,經(jīng)過(guò)修改后現(xiàn)在被專門用在AWS云上。
Forrester稱EMR有很好的市場(chǎng)前景。很多公司基于EMR為客戶提供服務(wù),有一些公司將EMR應(yīng)用于數(shù)據(jù)查詢、建模、集成和管理。而且AWS還在創(chuàng)新,F(xiàn)orrester稱未來(lái)EMR可以基于工作量的需要自動(dòng)縮放調(diào)整大小。亞馬遜計(jì)劃為其產(chǎn)品和服務(wù)提供更強(qiáng)大的EMR支持,包括它的RedShift數(shù)據(jù)倉(cāng)庫(kù)、新公布的Kenesis實(shí)時(shí)處理引擎以及計(jì)劃中的NoSQL數(shù)據(jù)庫(kù)和商業(yè)智能工具。不過(guò)AWS還沒(méi)有自己的Hadoop發(fā)行版。
Cloudera
Cloudera有開(kāi)源Hadoop的發(fā)行版,這個(gè)發(fā)行版采用了Apache Hadoop開(kāi)源項(xiàng)目的很多技術(shù),不過(guò)基于這些技術(shù)的發(fā)行版也有很大的進(jìn)步。Cloudera為它的Hadoop發(fā)行版開(kāi)發(fā)了很多功能,包括Cloudera管理器,用于管理和監(jiān)控,以及名為Impala的SQL引擎等。Cloudera的Hadoop發(fā)行版基于開(kāi)源Hadoop,但也不是純開(kāi)源的產(chǎn)品。當(dāng)Cloudera的客戶需要Hadoop不具備的某些功能時(shí),Cloudera的工程師們就會(huì)實(shí)現(xiàn)這些功能,或者找一個(gè)擁有這項(xiàng)技術(shù)的合作伙伴。Forrester表示:“Cloudera的創(chuàng)新方法忠于核心Hadoop,但因?yàn)槠淇蓪?shí)現(xiàn)快速創(chuàng)新并積極滿足客戶需求,這一點(diǎn)使它不同于其他那些供應(yīng)商?!蹦壳埃珻loudera的平臺(tái)已經(jīng)擁有200多個(gè)付費(fèi)客戶,一些客戶在Cloudera的技術(shù)支持下已經(jīng)可以跨1000多個(gè)節(jié)點(diǎn)實(shí)現(xiàn)對(duì)PB級(jí)數(shù)據(jù)的有效管理。
Hortonworks
和Cloudera一樣,Hortonworks是一個(gè)純粹的Hadoop技術(shù)公司。與Cloudera不同的是,Hortonworks堅(jiān)信開(kāi)源Hadoop比任何其他供應(yīng)商的Hadoop發(fā)行版都要強(qiáng)大。Hortonworks的目標(biāo)是建立Hadoop生態(tài)圈和Hadoop用戶社區(qū),推進(jìn)開(kāi)源項(xiàng)目的發(fā)展。Hortonworks平臺(tái)和開(kāi)源Hadoop聯(lián)系緊密,公司管理人員表示這會(huì)給用戶帶來(lái)好處,因?yàn)樗梢苑乐贡还?yīng)商套牢(如果Hortonworks的客戶想要離開(kāi)這個(gè)平臺(tái),他們可以輕松轉(zhuǎn)向其他開(kāi)源平臺(tái))。這并不是說(shuō)Hortonworks完全依賴開(kāi)源Hadoop技術(shù),而是因?yàn)樵摴緦⑵渌虚_(kāi)發(fā)的成果回報(bào)給了開(kāi)源社區(qū),比如Ambari,這個(gè)工具就是由Hortonworks開(kāi)發(fā)而成,用來(lái)填充集群管理項(xiàng)目漏洞。Hortonworks的方案已經(jīng)得到了Teradata、Microsoft、Red Hat和SAP這些供應(yīng)商的支持。
IBM
當(dāng)企業(yè)考慮一些大的IT項(xiàng)目時(shí),很多人首先會(huì)想到IBM。IBM是Hadoop項(xiàng)目的主要參與者之一,F(xiàn)orrester稱IBM已有100多個(gè)Hadoop部署,它的很多客戶都有PB級(jí)的數(shù)據(jù)。IBM在網(wǎng)格計(jì)算、全球數(shù)據(jù)中心和企業(yè)大數(shù)據(jù)項(xiàng)目實(shí)施等眾多領(lǐng)域有著豐富的經(jīng)驗(yàn)?!癐BM計(jì)劃繼續(xù)整合SPSS分析、高性能計(jì)算、BI工具、數(shù)據(jù)管理和建模、應(yīng)對(duì)高性能計(jì)算的工作負(fù)載管理等眾多技術(shù)?!?/p>
Intel
和AWS類似,英特爾不斷改進(jìn)和優(yōu)化Hadoop使其運(yùn)行在自己的硬件上,具體來(lái)說(shuō),就是讓Hadoop運(yùn)行在其至強(qiáng)芯片上,幫助用戶打破Hadoop系統(tǒng)的一些限制,使軟件和硬件結(jié)合的更好,英特爾的Hadoop發(fā)行版在上述方面做得比較好。Forrester指出英特爾在最近才推出這個(gè)產(chǎn)品,所以公司在未來(lái)還有很多改進(jìn)的可能,英特爾和微軟都被認(rèn)為是Hadoop市場(chǎng)上的潛力股。
MapR Technologies
MapR的Hadoop發(fā)行版目前為止也許是最好的了,不過(guò)很多人可能都沒(méi)有聽(tīng)說(shuō)過(guò)。Forrester對(duì)Hadoop用戶的調(diào)查顯示,MapR的評(píng)級(jí)最高,其發(fā)行版在架構(gòu)和數(shù)據(jù)處理能力上都獲得了最高分。MapR已將一套特殊功能融入其Hadoop發(fā)行版中。例如網(wǎng)絡(luò)文件系統(tǒng)(NFS)、災(zāi)難恢復(fù)以及高可用性功能。Forrester說(shuō)MapR在Hadoop市場(chǎng)上沒(méi)有Cloudera和Hortonworks那樣的知名度,MapR要成為一個(gè)真正的大企業(yè),還需要加強(qiáng)伙伴關(guān)系和市場(chǎng)營(yíng)銷。
Microsoft
微軟在開(kāi)源軟件問(wèn)題上一直很低調(diào),但在大數(shù)據(jù)形勢(shì)下,它不得不考慮讓W(xué)indows也兼容Hadoop,它還積極投入到開(kāi)源項(xiàng)目中,以更廣泛地推動(dòng)Hadoop生態(tài)圈的發(fā)展。我們可以在微軟的公共云Windows Azure HDInsight產(chǎn)品中看到其成果。微軟的Hadoop服務(wù)基于Hortonworks的發(fā)行版,而且是為Azure量身定制的。
微軟也有一些其他的項(xiàng)目,包括名為Polybase的項(xiàng)目,讓Hadoop查詢實(shí)現(xiàn)了SQLServer查詢的一些功能。Forrester說(shuō):“微軟在數(shù)據(jù)庫(kù)、數(shù)據(jù)倉(cāng)庫(kù)、云、OLAP、BI、電子表格(包括PowerPivot)、協(xié)作和開(kāi)發(fā)工具市場(chǎng)上有很大優(yōu)勢(shì),而且微軟擁有龐大的用戶群,但要在Hadoop這個(gè)領(lǐng)域成為行業(yè)領(lǐng)導(dǎo)者還有很遠(yuǎn)的路要走。”
Pivotal Software
EMC和Vmware部分大數(shù)據(jù)業(yè)務(wù)分拆組合產(chǎn)生了Pivotal。Pivotal一直努力構(gòu)建一個(gè)性能優(yōu)越的Hadoop發(fā)行版,為此,Pivotal在開(kāi)源Hadoop的基礎(chǔ)上又添加了一些新的工具,包括一個(gè)名為HAWQ的SQL引擎以及一個(gè)專門解決大數(shù)據(jù)問(wèn)題的Hadoop應(yīng)用。Forrester稱Pivotal Hadoop平臺(tái)的優(yōu)勢(shì)在于它整合了Pivotal、EMC、Vmware的眾多技術(shù),Pivotal的真正優(yōu)勢(shì)實(shí)際上等于EMC和Vmware兩大公司為其撐腰。到目前為止,Pivotal的用戶還不到100個(gè),而且大多是中小型客戶。
Teradata
對(duì)于Teradata來(lái)說(shuō),Hadoop既是一種威脅也是一種機(jī)遇。數(shù)據(jù)管理,特別是關(guān)于SQL和關(guān)系數(shù)據(jù)庫(kù)這一領(lǐng)域是Teradata的專長(zhǎng)。所以像Hadoop這樣的NoSQL平臺(tái)崛起可能會(huì)威脅到Teradata。相反,Teradata接受了Hadoop,通過(guò)與Hortonworks合作,Teradata在Hadoop平臺(tái)集成了SQL技術(shù),這使Teradata的客戶可以在Hadoop平臺(tái)上方便地使用存儲(chǔ)在Teradata數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)。
AMPLab
通過(guò)將數(shù)據(jù)轉(zhuǎn)變?yōu)樾畔ⅲ覀儾趴梢岳斫馐澜?,而這也正是AMPLab所做的。AMPLab致力于機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、數(shù)據(jù)庫(kù)、信息檢索、自然語(yǔ)言處理和語(yǔ)音識(shí)別等多個(gè)領(lǐng)域,努力改進(jìn)對(duì)信息包括不透明數(shù)據(jù)集內(nèi)信息的甄別技術(shù)。除了Spark,開(kāi)源分布式SQL查詢引擎Shark也源于AMPLab,Shark具有極高的查詢效率,具有良好的兼容性和可擴(kuò)展性。近幾年的發(fā)展使計(jì)算機(jī)科學(xué)進(jìn)入到全新的時(shí)代,而AMPLab為我們?cè)O(shè)想一個(gè)運(yùn)用大數(shù)據(jù)、云計(jì)算、通信等各種資源和技術(shù)靈活解決難題的方案,以應(yīng)對(duì)越來(lái)越復(fù)雜的各種難題。
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關(guān)系型的數(shù)據(jù)庫(kù)。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題,而非關(guān)系型的數(shù)據(jù)庫(kù)則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫(kù)的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來(lái)的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題,包括超大規(guī)模數(shù)據(jù)的存儲(chǔ)。
(例如谷歌或Facebook每天為他們的用戶收集萬(wàn)億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無(wú)需多余操作就可以橫向擴(kuò)展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 關(guān)系型數(shù)據(jù)庫(kù)與NoSQL的區(qū)別?
3.1 RDBMS
高度組織化結(jié)構(gòu)化數(shù)據(jù)
結(jié)構(gòu)化查詢語(yǔ)言(SQL)
數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中。
數(shù)據(jù)操縱語(yǔ)言,數(shù)據(jù)定義語(yǔ)言
嚴(yán)格的一致性
基礎(chǔ)事務(wù)
ACID
關(guān)系型數(shù)據(jù)庫(kù)遵循ACID規(guī)則
事務(wù)在英文中是transaction,和現(xiàn)實(shí)世界中的交易很類似,它有如下四個(gè)特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說(shuō)事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失敗,整個(gè)事務(wù)就失敗,需要回滾。比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個(gè)步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會(huì)莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說(shuō)數(shù)據(jù)庫(kù)要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫(kù)原本的一致性約束。
I (Isolation) 獨(dú)立性
所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響,如果一個(gè)事務(wù)要訪問(wèn)的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交,它所訪問(wèn)的數(shù)據(jù)就不受未提交事務(wù)的影響。比如現(xiàn)有有個(gè)交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個(gè)交易還未完成的情況下,如果此時(shí)B查詢自己的賬戶,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事務(wù)提交后,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫(kù)上,即使出現(xiàn)宕機(jī)也不會(huì)丟失。
3.2 NoSQL
代表著不僅僅是SQL
沒(méi)有聲明性查詢語(yǔ)言
沒(méi)有預(yù)定義的模式
鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ),文檔存儲(chǔ),圖形數(shù)據(jù)庫(kù)
最終一致性,而非ACID屬性
非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
CAP定理
高性能,高可用性和可伸縮性
分布式數(shù)據(jù)庫(kù)中的CAP原理(了解)
CAP定理:
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動(dòng)都是同步的
Availability(可用性), 好的響應(yīng)性能
Partition tolerance(分區(qū)容錯(cuò)性) 可靠性
P: 系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作。
定理:任何分布式系統(tǒng)只可同時(shí)滿足二點(diǎn),沒(méi)法三者兼顧。
CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,
因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫(kù)分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大。
CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐?duì)一致性要求低一些。
CAP理論就是說(shuō)在分布式存儲(chǔ)系統(tǒng)中,最多只能實(shí)現(xiàn)上面的兩點(diǎn)。
而由于當(dāng)前的網(wǎng)絡(luò)硬件肯定會(huì)出現(xiàn)延遲丟包等問(wèn)題,所以分區(qū)容忍性是我們必須需要實(shí)現(xiàn)的。
所以我們只能在一致性和可用性之間進(jìn)行權(quán)衡,沒(méi)有NoSQL系統(tǒng)能同時(shí)保證這三點(diǎn)。
說(shuō)明:C:強(qiáng)一致性 A:高可用性 P:分布式容忍性
舉例:
CA:傳統(tǒng)Oracle數(shù)據(jù)庫(kù)
AP:大多數(shù)網(wǎng)站架構(gòu)的選擇
CP:Redis、Mongodb
注意:分布式架構(gòu)的時(shí)候必須做出取舍。
一致性和可用性之間取一個(gè)平衡。多余大多數(shù)web應(yīng)用,其實(shí)并不需要強(qiáng)一致性。
因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫(kù)產(chǎn)品的方向。
4. 當(dāng)下NoSQL的經(jīng)典應(yīng)用
當(dāng)下的應(yīng)用是 SQL 與 NoSQL 一起使用的。
代表項(xiàng)目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型機(jī),很貴的,好像好幾萬(wàn)一臺(tái);O 是指 Oracle 數(shù)據(jù)庫(kù),也很貴的,好幾萬(wàn)呢;M 是指 EMC 的存儲(chǔ)設(shè)備,也很貴的。
難點(diǎn):
數(shù)據(jù)類型多樣性。
數(shù)據(jù)源多樣性和變化重構(gòu)。
數(shù)據(jù)源改造而服務(wù)平臺(tái)不需要大面積重構(gòu)。
1 理解ACID與BASE的區(qū)別(ACID是關(guān)系型數(shù)據(jù)庫(kù)強(qiáng)一致性的四個(gè)要求,而B(niǎo)ASE是NoSQL數(shù)據(jù)庫(kù)通常對(duì)可用性及一致性的弱要求原則,它們的意思分別是,ACID:atomicity, consistency, isolation, durability;BASE:Basically Available, Soft-state, Eventually Consistent。同時(shí)有意思的是ACID在英語(yǔ)里意為酸,BASE意思為堿)
2 理解持久化與非持久化的區(qū)別。這么說(shuō)是因?yàn)橛械腘oSQL系統(tǒng)是純內(nèi)存存儲(chǔ)的。
3 你必須意識(shí)到傳統(tǒng)有關(guān)系型數(shù)據(jù)庫(kù)與NoSQL系統(tǒng)在數(shù)據(jù)結(jié)構(gòu)上的本質(zhì)區(qū)別。傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)通常是基于行的表格型存儲(chǔ),而NoSQL系統(tǒng)包括了列式存儲(chǔ)(Cassandra)、key/value存儲(chǔ)(Memcached)、文檔型存儲(chǔ)(CouchDB)以及圖結(jié)構(gòu)存儲(chǔ)(Neo4j)
4與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)有統(tǒng)一的SQL語(yǔ)言操作接口不同,NoSQL系統(tǒng)通常有自己特有的API接口。
5 在架構(gòu)上,你必須搞清楚,NoSQL系統(tǒng)是被設(shè)計(jì)用于成百上千臺(tái)機(jī)器的集群中的,而非共享型數(shù)據(jù)庫(kù)系統(tǒng)的架構(gòu)。
6在NoSQL系統(tǒng)中,可能你得習(xí)慣一下不知道你的數(shù)據(jù)具體存在何處的情況。
7 在NoSQL系統(tǒng)中,你最好習(xí)慣它的弱一致性?!眅ventually consistent”(最終一致性)正是BASE原則中的重要一項(xiàng)。比如在Twitter,你在Followers列表中經(jīng)常會(huì)感受到數(shù)據(jù)的延遲。
8 在NoSQL系統(tǒng)中,你要理解,很多時(shí)候數(shù)據(jù)并不總是可用的。
9 你得理解,有的方案是擁有分區(qū)容忍性的,有的方案不一定有。
MPP是一種進(jìn)行系統(tǒng)擴(kuò)展的方式,它由多個(gè)SMP服務(wù)器通過(guò)一定的節(jié)點(diǎn)互聯(lián)網(wǎng)絡(luò)進(jìn)行連接,協(xié)同工作,完成相同的任務(wù),從用戶的角度來(lái)看是一個(gè)服務(wù)器系統(tǒng)。每一個(gè)節(jié)點(diǎn)只能訪問(wèn)自己本地資源(內(nèi)存,存儲(chǔ)等),是一種完全無(wú)共享結(jié)構(gòu)(Share Nothing)結(jié)構(gòu)。
而NoSql=Not Only Sql。泛指的是非關(guān)系型數(shù)據(jù)庫(kù)。大概分為四類。Key-Value存儲(chǔ)的數(shù)據(jù)庫(kù),列式存儲(chǔ)數(shù)據(jù)庫(kù)(Hbase),文檔型數(shù)據(jù)庫(kù)和圖形數(shù)據(jù)庫(kù)。
NoSQL描述的是大量結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)方法的集合,根據(jù)結(jié)構(gòu)化方法以及應(yīng)用場(chǎng)合的不同,主要可以將NoSQL分為以下幾類。
(1)Column-Oriented
面向檢索的列式存儲(chǔ),其存儲(chǔ)結(jié)構(gòu)為列式結(jié)構(gòu),同于關(guān)系型數(shù)據(jù)庫(kù)的行式結(jié)構(gòu),這種結(jié)構(gòu)會(huì)讓很多統(tǒng)計(jì)聚合操作更簡(jiǎn)單方便,使系統(tǒng)具有較高的可擴(kuò)展性。這類數(shù)據(jù)庫(kù)還可以適應(yīng)海量數(shù)據(jù)的增加以及數(shù)據(jù)結(jié)構(gòu)的變化,這個(gè)特點(diǎn)與云計(jì)算所需的相關(guān)需求是相符合的,比如GoogleAppengine的BigTable以及相同設(shè)計(jì)理念的Hadoop子系統(tǒng)HaBase就是這類的典型代表。需要特別指出的是,Big Table特別適用于MapReduce處理,這對(duì)于云計(jì)算的發(fā)展有很高的適應(yīng)性。
(2)Key-Value。
面向高性能并發(fā)讀/寫的緩存存儲(chǔ),其結(jié)構(gòu)類似于數(shù)據(jù)結(jié)構(gòu)中的Hash表,每個(gè)Key分別對(duì)應(yīng)一個(gè)Value,能夠提供非??斓牟樵兯俣?、大數(shù)據(jù)存放量和高并發(fā)操作,非常適合通過(guò)主鍵對(duì)數(shù)據(jù)進(jìn)行查詢和修改等操作。Key-Value數(shù)據(jù)庫(kù)的主要特點(diǎn)是具有極高的并發(fā)讀/寫性能,非常適合作為緩存系統(tǒng)使用。MemcacheDB、BerkeleyDB、Redis、Flare就是Key-Value數(shù)據(jù)庫(kù)的代表。
(3)Document-Oriented。
面向海量數(shù)據(jù)訪問(wèn)的文檔存儲(chǔ),這類存儲(chǔ)的結(jié)構(gòu)與Key-Value非常相似,也是每個(gè)Key分別對(duì)應(yīng)一個(gè)Value,但是這個(gè)Value主要以JSON(JavaScriptObjectNotations)或者XML等格式的文檔來(lái)進(jìn)行存儲(chǔ)。這種存儲(chǔ)方式可以很方便地被面向?qū)ο蟮恼Z(yǔ)言所使用。這類數(shù)據(jù)庫(kù)可在海量的數(shù)據(jù)中快速查詢數(shù)據(jù),典型代表為MongoDB、CouchDB等。
NoSQL具有擴(kuò)展簡(jiǎn)單、高并發(fā)、高穩(wěn)定性、成本低廉等優(yōu)勢(shì),也存在一些問(wèn)題。例如,NoSQL暫不提供SQL的支持,會(huì)造成開(kāi)發(fā)人員的額外學(xué)習(xí)成本;NoSQL大多為開(kāi)源軟件其成熟度與商用的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)相比有差距;NoSQL的架構(gòu)特性決定了其很難保證數(shù)據(jù)的完整性,適合在一些特殊的應(yīng)用場(chǎng)景使用。
NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫(kù)。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題,而非關(guān)系型的數(shù)據(jù)庫(kù)則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫(kù)的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來(lái)的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題。
雖然NoSQL流行語(yǔ)火起來(lái)才短短一年的時(shí)間,但是不可否認(rèn),現(xiàn)在已經(jīng)開(kāi)始了第二代運(yùn)動(dòng)。盡管早期的堆棧代碼只能算是一種實(shí)驗(yàn),然而現(xiàn)在的系統(tǒng)已經(jīng)更加的成熟、穩(wěn)定。不過(guò)現(xiàn)在也面臨著一個(gè)嚴(yán)酷的事實(shí):技術(shù)越來(lái)越成熟——以至于原來(lái)很好的NoSQL數(shù)據(jù)存儲(chǔ)不得不進(jìn)行重寫,也有少數(shù)人認(rèn)為這就是所謂的2.0版本。這里列出一些比較知名的工具,可以為大數(shù)據(jù)建立快速、可擴(kuò)展的存儲(chǔ)庫(kù)。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。
對(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讀取數(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ù)就可以盡快地寫入一個(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ù)的不同??梢哉f(shuō),NoSQL各有所長(zhǎng),成功的NoSQL必然特別適用于某些場(chǎng)合或者某些應(yīng)用,在這些場(chǎng)合中會(huì)遠(yuǎn)遠(yuǎn)勝過(guò)關(guān)系型數(shù)據(jù)庫(kù)和其他的NoSQL。