說起大數(shù)據(jù)生態(tài),不得不提大數(shù)據(jù)生態(tài)系統(tǒng)圖,而大數(shù)據(jù)行業(yè)卻不斷的發(fā)生著巨變,目前的這張圖應(yīng)該還算比較新了。
創(chuàng)業(yè)者們蜂擁至這個行業(yè),這個行業(yè)正變得越來越擁擠。Hadoop似乎已經(jīng)奠定了其作為整個大數(shù)據(jù)生態(tài)系統(tǒng)的關(guān)鍵部分,Spark是另一個基于內(nèi)存計算的開源分布式計算框架,它試圖填補Hadoop的弱項,提供更快的數(shù)據(jù)分析和良好的編程接口。
分析工具領(lǐng)域變得異常活躍,數(shù)據(jù)應(yīng)用領(lǐng)域正如預(yù)測一樣逐漸成為重心。一些類別如數(shù)據(jù)庫無論是NoSQL還是NewSQL和社交數(shù)據(jù)分析正日趨成熟。
今天就先讓我們從眾多內(nèi)容當(dāng)中,先挑選一塊和大家探討探討,先從數(shù)據(jù)庫說起吧。
◎數(shù)據(jù)庫技術(shù) 傳統(tǒng)vs新型
從大的角度講,可以簡單的將數(shù)據(jù)庫分為兩類:
●傳統(tǒng)SMP架構(gòu)的數(shù)據(jù)庫,主要指代的是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,例如DB2、Postgrel,MySQL等。
●新型數(shù)據(jù)庫,主要指代為支持大規(guī)模數(shù)量集,高并發(fā)要求,高可擴展性等孕育而生的新型數(shù)據(jù)庫。包括目前大數(shù)據(jù)生態(tài)當(dāng)中主流MPP,NoSQL,NewSQL數(shù)據(jù)庫等。
傳統(tǒng)數(shù)據(jù)庫和新型數(shù)據(jù)庫的一個主要區(qū)別是SMP架構(gòu)VS分布式/并行。
◎數(shù)據(jù)庫理論基礎(chǔ)
理論基礎(chǔ) - 服務(wù)器系統(tǒng)架構(gòu)
●SMP(Symmetric Multi-Processor)
SMP是對稱多處理器結(jié)構(gòu)的簡稱,指代多個CPU對稱工作,無主次或從屬關(guān)系。各個CPU共享相同的物理內(nèi)存,每個CPU訪問內(nèi)存中的任何地址的路徑是相同的(訪問的時間是相同的),因此SMP也被稱為一致存儲器訪問結(jié)構(gòu)(UMA: Uniform Memory Access)。
●NUMA(Non-Uniform Memory Access)
NUMA是非對稱的多處理結(jié)構(gòu),剛好與SMP相對,多個CPU工作時,對內(nèi)存的訪問路徑不同。NUMA架構(gòu)的提出主要是解決SMP架構(gòu)下多CPU擴展的問題。
●MPP(Massive Parallel Processing)
和NUMA不同,MPP提供了另一種進行系統(tǒng)擴展的方式。它由多個SMP服務(wù)器通過一定的節(jié)點互聯(lián)網(wǎng)絡(luò)進行連接,協(xié)同工作,完成相同的任務(wù),從用戶的角度來看是一個服務(wù)器系統(tǒng)。
SMP和NUMA都主要指向單一的計算機系統(tǒng),而MPP則有點集群的意思了
理論基礎(chǔ) - ACID基本理論
●原子性(Atomic)
整個事務(wù)要么成功,要么失敗,杜絕部分成功
●一致性(Consistent)
事務(wù)的運行并不改變數(shù)據(jù)庫中數(shù)據(jù)的一致性。例如,完整約束了a+b=10,一個事務(wù)改變了a,那么b也應(yīng)該隨之改變
●獨立性(lsolated)
也稱作隔離性,指兩個以上的事務(wù)不會出現(xiàn)交錯執(zhí)行的狀態(tài),因為這樣不可能會導(dǎo)致數(shù)據(jù)不一致
●持久性(Durable)
事務(wù)執(zhí)行成功以后,該事務(wù)所對數(shù)據(jù)庫做的更改便是持久的保存在數(shù)據(jù)庫之中,不會無緣無故的回滾
傳統(tǒng)基于關(guān)系模型的數(shù)據(jù)庫遵從ACID基本理論,而新型分布式數(shù)據(jù)庫則并不完全遵從該理論
理論基礎(chǔ) - 分布式CAP理論
●一致性(Consistent)
即數(shù)據(jù)的?一致性,簡單的說就是數(shù)據(jù)復(fù)制到N臺機器,如果有更新,要N臺機器的數(shù)據(jù)一起更新
●可用性(Availability)
在集群中一部分節(jié)點故障后,集群整體還能響應(yīng)客戶端的讀寫請求
●分區(qū)容錯性(Tolerance)
分區(qū)發(fā)生但不影響整個系統(tǒng)的運行:
基于傳統(tǒng)關(guān)系型模型數(shù)據(jù)庫更關(guān)注CA,新型NoSQL數(shù)據(jù)庫更關(guān)心CP,AP
◎數(shù)據(jù)庫分類與對比分析
根據(jù)體系架構(gòu)來分類
從數(shù)據(jù)庫的體系架構(gòu)來看,可以將數(shù)據(jù)庫分為:
●SMP Database
這類數(shù)據(jù)大多指代的是基于傳統(tǒng)關(guān)系型數(shù)據(jù)庫模型的數(shù)據(jù)庫,比如IBM的DB2,Postgres,MySQL等
●MPP Database
基于MPP體系架構(gòu)的數(shù)據(jù)庫,例如Teradata, Greenplum, Netezza等
●Distribute Database
嚴格來講MPP也應(yīng)該屬于分布式數(shù)據(jù)庫,但這里更多指的是新型NoSQL和NewSQL數(shù)據(jù)庫,例如Hbase, Cassandra, Hive, mongoDB等
根據(jù)SQL支持來分類
根據(jù)數(shù)據(jù)庫對SQL的支持情況,可以將數(shù)據(jù)庫分為:
●SQL Database
而SQL數(shù)據(jù)又可以細分為:
?Old SQL傳統(tǒng)SQL數(shù)據(jù)庫
?New SQL新型SQL數(shù)據(jù)庫
?MPP
?SQL on Hadoop
●NoSQL Database
而NoSQL數(shù)據(jù)庫本身又是非常寬泛的,其又可以分為多種類型:
?Key-Value Database
?Document Database
?Column family Stores
?Graph Database
SQL,NewSQL and NoSQL
無論是「OldSQL」,「NewSQL」還是「NoSQL」,都是大數(shù)據(jù)解決方案中經(jīng)常提及的名詞。那么面對傳統(tǒng)的SQL數(shù)據(jù)庫, NoSQL數(shù)據(jù)存儲以及NewSQL數(shù)據(jù)該如何進行選擇呢?其實,沒有任何一款可以應(yīng)對所有的應(yīng)用場景,應(yīng)該根據(jù)應(yīng)用場景選擇對的數(shù)據(jù)庫。
對于傳統(tǒng)的SQL數(shù)據(jù)庫來說,它已經(jīng)被使用了多年,成為了很多應(yīng)用服務(wù)過程中依賴的核心組件。如果對于自身的應(yīng)用來說它的運行和性能表現(xiàn)是可接受的,那么其實是不需要考慮替換的。沒有必要的替換或更新只會引入更多的工作量,更大的風(fēng)險。對于傳統(tǒng)SQL數(shù)據(jù)庫而言,其優(yōu)勢主要體現(xiàn)在:
●提供了系統(tǒng)運行多年的穩(wěn)定性和可靠性,對標準SQL的支持能力
●與ORM的兼容度
●擁有更加豐富的事務(wù)處理功能
●即席查詢的能力
●成熟而穩(wěn)定的商業(yè)生態(tài)
傳統(tǒng)SQL在過去一直處于市場的壟斷地位,但是隨著存儲,處理和分析的數(shù)據(jù)量指數(shù)倍的快速增長,對傳統(tǒng)SQL數(shù)據(jù)庫形成了非常大的挑戰(zhàn),其劣勢主要體現(xiàn)在:
●設(shè)計架構(gòu)決定了很難進行擴展,性能瓶頸往往局限在單機的處理能力上
●傳統(tǒng)SQL數(shù)據(jù)庫系統(tǒng)設(shè)計遵循的往往是通?用標準"one size fits all",因此在很多專用場景下也不是最優(yōu)的
●復(fù)雜的性能調(diào)優(yōu)參數(shù),需要在性能,數(shù)據(jù)安全,資源使用等多方面平衡,調(diào)優(yōu)成本非常高
對于NoSQL數(shù)據(jù)庫來說,它在目前的大數(shù)據(jù)生態(tài)和真實應(yīng)用場景中已經(jīng)越來越多的被廣泛的應(yīng)用。對非結(jié)構(gòu),半結(jié)構(gòu)化數(shù)據(jù)的支持使得在很多特定場景下的開發(fā)非常簡單,對于對SQL弱依賴的業(yè)務(wù),NoSQL的引入不但降低了本身的成本而且增加了系統(tǒng)的擴展性和性能。其優(yōu)勢主要體現(xiàn)在:
●大多NoSQL設(shè)計遵從最終一致性,因此具有更高的可用性
●同時基于最終一致性的系統(tǒng)相比于傳統(tǒng)的OLAP關(guān)系型數(shù)據(jù)庫具有更好的負載擴展性,支持更大的數(shù)據(jù)集
●很多NoSQL系統(tǒng)對于非關(guān)系性數(shù)據(jù),例如log messages, XML and JSON documents進行了更多的優(yōu)化
盡管NoSQL數(shù)據(jù)庫技術(shù)目前發(fā)展非常迅速,應(yīng)用也越來越廣,但是其還是有自身的局限性:
●NoSQL數(shù)據(jù)庫基本上不支持事務(wù),也不遵從ACID。因此對于嚴格依賴ACID的應(yīng)用并不適用
●對OLAP-style的查詢并不能直接進行很好的支持,需要更多應(yīng)用開發(fā)量
NewSQL也是目前比較流行的術(shù)語,與NoSQL相比還比較新。NewSQL系統(tǒng)基本上是基于關(guān)系數(shù)據(jù)庫模型的,對SQL的支持非常好,與此同時嘗試解決傳統(tǒng)SQL數(shù)據(jù)庫面臨的問題。NewSQL數(shù)據(jù)庫的設(shè)計目的不僅具有NoSQL對海量數(shù)據(jù)的存儲能力,還保持了傳統(tǒng)數(shù)據(jù)庫支持ACID和SQL等特征。NewSQL的主要優(yōu)勢是:
●減少了應(yīng)用研發(fā)和設(shè)計的復(fù)雜度,提供了強一致性和全事務(wù)支持
●對SQL的支持以及相應(yīng)的標準工具
●豐富的數(shù)據(jù)分析SQL支持和擴展
●無需應(yīng)用層面大的改進便可以在數(shù)據(jù)和查詢模型的基礎(chǔ)上提供類似NoSQLstyle集群方案的擴展性和性能
于此同時,NewSQL也存在其自身的劣勢:
目前還沒有NewSQL系統(tǒng)具備像傳統(tǒng)SQL數(shù)據(jù)庫系統(tǒng)那樣的通用性
●由于NewSQL自身in-memory的系統(tǒng)架構(gòu)設(shè)計,在海量數(shù)據(jù)的支持上還是面臨很多技術(shù)和成本的挑戰(zhàn)
下表對OldSQL,NoSQL和NewSQL:
MPP and Hadoop
對于MPP和Hadoop而言,很多人都會把兩者放在一起進行比較,可實際上這兩者本身應(yīng)該不太具有可比性,因為并不完全是同類的產(chǎn)品,之所以會比較,可能是因為在特定的應(yīng)用場景下,我們不知道也不清楚該如何從他們之中進行選擇。
無論是MPP數(shù)據(jù)庫還是Hadoop,其基礎(chǔ)架構(gòu)都是以分布式為基礎(chǔ)的。MPP數(shù)據(jù)庫本質(zhì)上是分布式并行關(guān)系型數(shù)據(jù)庫系統(tǒng),而Hadoop并不是一個簡單的單一系統(tǒng)或技術(shù),而是一個生態(tài)系統(tǒng),由多個組件和不同的功能構(gòu)建起來。
MPP數(shù)據(jù)庫的主要架構(gòu)特點是:
●分布式,基于網(wǎng)格計算技術(shù)
●Shared-nothing
●DAS(direct-attached storage)存儲特質(zhì)
●數(shù)據(jù)分區(qū)以及本地處理
●數(shù)據(jù)壓縮
●高性能網(wǎng)絡(luò)鏈接
對于MPP數(shù)據(jù)庫,它比較擅長的是:
●關(guān)系型數(shù)據(jù)
●批處理
●即席數(shù)據(jù)查詢分析
●低并發(fā)場景
●ANSI SQL支持度高
而與之不同的是,Hadoop?比較擅長的是:
●一次寫多次度
●100+以上節(jié)點集群規(guī)模
●支持關(guān)系型和非關(guān)系型數(shù)據(jù)
●具有非常高的并發(fā)性
批處理和分析負載
具有非常好的擴展性
下表對MPP和Hadoop進行了對比分析: