傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)、NoSQL、NewSQL,三者如何在云時(shí)代共處?

原標(biāo)題:傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)、NoSQL、NewSQL,三者如何在云時(shí)代共處?

數(shù)據(jù)已經(jīng)是當(dāng)下及未來(lái)最重要的生產(chǎn)資料,而伴隨數(shù)據(jù)價(jià)值的不斷提升,以及數(shù)據(jù)的爆炸式增長(zhǎng),數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ)的重要載體,正在迎來(lái)變化。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)越來(lái)越積極地?fù)肀磥?lái),新型云原生的數(shù)據(jù)庫(kù)架構(gòu)備受關(guān)注。

那么,關(guān)系型數(shù)據(jù)庫(kù)的未來(lái)走向如何?新型數(shù)據(jù)庫(kù)架構(gòu)又有哪些?誰(shuí)才是未來(lái)?不要著急下一個(gè)結(jié)論,本文在深入探討每一種數(shù)據(jù)庫(kù)優(yōu)劣勢(shì)的基礎(chǔ)上,結(jié)合未來(lái),做一個(gè)全面的梳理。

關(guān)系型數(shù)據(jù)庫(kù)老矣?

關(guān)系型數(shù)據(jù)庫(kù)從出現(xiàn)至今,幾十年時(shí)間里一直是數(shù)據(jù)庫(kù)領(lǐng)域的佼佼者。

根據(jù)全球較為權(quán)威的DB-Engines公布的數(shù)據(jù)庫(kù)統(tǒng)計(jì)排名,截至2018年6月,排名前6位的數(shù)據(jù)庫(kù),僅有排名第5的MongoDB是文檔型數(shù)據(jù)庫(kù),其余全部是關(guān)系型數(shù)據(jù)庫(kù),且前3位所占有的比重遠(yuǎn)領(lǐng)先于其它數(shù)據(jù)庫(kù)。 關(guān)系型數(shù)據(jù)庫(kù)在經(jīng)過(guò)大數(shù)據(jù)、NoSQL及NewSQL等新興技術(shù)的輪番轟炸后依然堅(jiān)挺,這與其固有的優(yōu)勢(shì)密不可分。

總結(jié)起來(lái),主要體現(xiàn)在對(duì)開(kāi)發(fā)、運(yùn)維、系統(tǒng)這三個(gè)方面上的重大影響上。

1、開(kāi)發(fā)優(yōu)勢(shì)

對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),關(guān)系型數(shù)據(jù)庫(kù)的首要優(yōu)勢(shì)是面向SQL。

SQL是關(guān)系型數(shù)據(jù)庫(kù)的結(jié)構(gòu)化查詢(xún)語(yǔ)言,雖然不同的關(guān)系型數(shù)據(jù)庫(kù)有不同的SQL方言,但基于ANSI標(biāo)準(zhǔn)的SQL是大部分?jǐn)?shù)據(jù)庫(kù)支持的。SQL是面向數(shù)據(jù)庫(kù)的訪問(wèn)語(yǔ)言,可以非常方便地對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改、查以及授權(quán)和管理。而且SQL的查詢(xún)靈活度非常高,可以十分便捷地在聯(lián)機(jī)事務(wù)處理(OLTP)與聯(lián)機(jī)分析處理(OLAP)之間轉(zhuǎn)換。 另外,SQL是應(yīng)用開(kāi)發(fā)工程師必須掌握的一門(mén)編程語(yǔ)言,流行度非常高,對(duì)于任何公司而言,招聘到一個(gè)完全不會(huì)寫(xiě)SQL的應(yīng)用開(kāi)發(fā)工程師的概率非常小。因此,SQL極大地降低了招聘開(kāi)發(fā)人員的成本。 除了SQL語(yǔ)言本身,各種開(kāi)發(fā)語(yǔ)言對(duì)關(guān)系型數(shù)據(jù)庫(kù)的支持也十分完善。

以Java為例,JDBC是Java語(yǔ)言訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)接口,各個(gè)關(guān)系型數(shù)據(jù)庫(kù)廠商均提供了實(shí)現(xiàn)JDBC接口的驅(qū)動(dòng)程序。使用Java語(yǔ)言進(jìn)行開(kāi)發(fā)的工程師無(wú)需感知不同關(guān)系型數(shù)據(jù)庫(kù)間的差異,只要根據(jù)JDBC接口編程即可。

2、運(yùn)維優(yōu)勢(shì)

關(guān)系型數(shù)據(jù)庫(kù)由于存在時(shí)間長(zhǎng)久,因此針對(duì)每一種常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù),都能比較容易地招聘到相應(yīng)的數(shù)據(jù)庫(kù)管理員(DBA),以保證數(shù)據(jù)庫(kù)的穩(wěn)定性、完整性、安全性、并通過(guò)監(jiān)控和分析關(guān)系型數(shù)據(jù)庫(kù)的系統(tǒng)瓶頸提升設(shè)計(jì)的合理性。 成熟的關(guān)系型數(shù)據(jù)庫(kù)擁有完善的生態(tài)圈,可以保證用于實(shí)現(xiàn)數(shù)據(jù)備份、性能監(jiān)測(cè)分析等功能的配套工具能夠正常使用。規(guī)模較大的企業(yè)以及重要業(yè)務(wù)系統(tǒng)一般都需要專(zhuān)門(mén)的DBA進(jìn)行運(yùn)維工作。

3、系統(tǒng)優(yōu)勢(shì)

只有時(shí)間才是檢驗(yàn)技術(shù)是否成熟與穩(wěn)定的標(biāo)準(zhǔn)。

關(guān)系型數(shù)據(jù)庫(kù)經(jīng)歷了幾十年的考驗(yàn),能夠應(yīng)對(duì)超大規(guī)模的使用需求,其存儲(chǔ)引擎也十分成熟。基于MVCC的數(shù)據(jù)庫(kù)引擎在性能和正確性上能做到很好的平衡,并且能通過(guò)B+Tree索引大幅提升查詢(xún)的效率。面對(duì)數(shù)據(jù)庫(kù)這樣的關(guān)鍵組件,謹(jǐn)慎選用是架構(gòu)師們需要十分注意的。 基于ACID的事務(wù)是關(guān)系型數(shù)據(jù)庫(kù)帶給應(yīng)用系統(tǒng)的又一次強(qiáng)力保障。

ACIDACID是數(shù)據(jù)庫(kù)事務(wù)能夠正確執(zhí)行的四個(gè)基本要素的首字母,分別指代:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持久性(Durability)。

只有支持事務(wù)的數(shù)據(jù)庫(kù)才能最大限度地保證數(shù)據(jù)的正確性和完整性。

不過(guò),盡管關(guān)系型數(shù)據(jù)庫(kù)的性能和訪問(wèn)承載能力在面向單一數(shù)據(jù)節(jié)點(diǎn)的企業(yè)級(jí)應(yīng)用時(shí)代是無(wú)可挑剔的。但在訪問(wèn)量和數(shù)據(jù)量急劇增長(zhǎng)的今天,關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)很難再像以前那樣作為大規(guī)模系統(tǒng)的底層支撐了,甚至成為了應(yīng)用系統(tǒng)的瓶頸。

關(guān)系型數(shù)據(jù)庫(kù)的不足主要體現(xiàn)在:?jiǎn)喂?jié)點(diǎn)并發(fā)訪問(wèn)量受限、單節(jié)點(diǎn)數(shù)據(jù)承載量受限、分布式事務(wù)性能衰退嚴(yán)重。原因歸根結(jié)底是設(shè)計(jì)初衷有一定的問(wèn)題。它并非分布式的產(chǎn)物,對(duì)分布式系統(tǒng)天生不友好,因此它很難適應(yīng)互聯(lián)網(wǎng)的架構(gòu)模型。面對(duì)可以隨時(shí)彈性擴(kuò)容的無(wú)狀態(tài)服務(wù),使用關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)略顯笨重。

另辟蹊徑的NoSQL數(shù)據(jù)庫(kù)

隨著關(guān)系型數(shù)據(jù)庫(kù)的不足之處越來(lái)越明顯地被暴露出來(lái),NoSQL數(shù)據(jù)庫(kù)出現(xiàn)了。

NoSQL數(shù)據(jù)庫(kù)的目的并不是取代SQL數(shù)據(jù)庫(kù),而是實(shí)現(xiàn)“Not Only SQL”,提供SQL之外的另一種選擇。NoSQL 通常不保證ACID,同時(shí)采用分布式架構(gòu),具有很強(qiáng)的擴(kuò)展性,這種特點(diǎn)使得NoSQL數(shù)據(jù)庫(kù)適應(yīng)于許多需要支持大規(guī)模、高并發(fā)、海量數(shù)據(jù)存儲(chǔ)分析的新時(shí)代業(yè)務(wù)。

NoSQL數(shù)據(jù)庫(kù)有很多種分類(lèi),大致包括鍵值數(shù)據(jù)庫(kù)、文檔數(shù)據(jù)庫(kù)、列族數(shù)據(jù)庫(kù)以及圖數(shù)據(jù)庫(kù)等,可以應(yīng)對(duì)各式各樣的場(chǎng)景。

鍵值數(shù)據(jù)庫(kù)的代表是Redis。Redis在很多場(chǎng)景下都作為緩存使用,但它也同樣提供了落盤(pán)功能。在面對(duì)通過(guò)主鍵進(jìn)行查詢(xún)的場(chǎng)景,Redis的效率非常高。

文檔數(shù)據(jù)庫(kù)的代表是MongoDB。文檔模型與面向?qū)ο蟮臄?shù)據(jù)表達(dá)方式更加接近,它擁有自由度極高的Schema模型,可以方便地與JSON數(shù)據(jù)進(jìn)行映射。

列族數(shù)據(jù)庫(kù)的代表是Hadoop大數(shù)據(jù)體系中的HBase,它是專(zhuān)門(mén)用于處理海量數(shù)據(jù)的分布式數(shù)據(jù)庫(kù)。 圖數(shù)據(jù)庫(kù)是用于處理圖關(guān)系的數(shù)據(jù)庫(kù),一般用于特殊場(chǎng)景。

NoSQL數(shù)據(jù)庫(kù)種類(lèi)繁多,應(yīng)用場(chǎng)景天差地別。不過(guò)有一個(gè)共性,那就是大多對(duì)分布式數(shù)據(jù)庫(kù)所需的分片和數(shù)據(jù)遷移功能支持得非常好,在海量數(shù)據(jù)和高并發(fā)支持方面,性能強(qiáng)于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)。對(duì)于這樣的場(chǎng)景,NoSQL數(shù)據(jù)庫(kù)會(huì)是非常合適的選擇。

不過(guò),NoSQL數(shù)據(jù)庫(kù)也存在一些不足。比如,不同的NoSQL數(shù)據(jù)庫(kù)都有自己的查詢(xún)語(yǔ)言,相比于SQL,制定應(yīng)用程序標(biāo)準(zhǔn)接口會(huì)更加困難,并且大多數(shù)NoSQL數(shù)據(jù)庫(kù)不提供ACID事務(wù)操作,因此如果企業(yè)的核心業(yè)務(wù)對(duì)數(shù)據(jù)一致性要求嚴(yán)格,在選擇NoSQL數(shù)據(jù)庫(kù)時(shí)需要慎重。正如NoSQL數(shù)據(jù)庫(kù)的定義所說(shuō),它們是基于SQL的關(guān)系型數(shù)據(jù)庫(kù)的有益補(bǔ)充,兩者是相輔相成,而非相互替代關(guān)系。

NewSQL冉冉升起

由于SQL和ACID事務(wù)實(shí)在太深入人心,而對(duì)分布式數(shù)據(jù)庫(kù)的需求又前所未有的旺盛,因此另一種數(shù)據(jù)庫(kù)NewSQL就應(yīng)運(yùn)而生了。

NewSQL是各種具有分布式可擴(kuò)展功能的數(shù)據(jù)庫(kù)的簡(jiǎn)稱(chēng),NewSQL繼承了NoSQL對(duì)海量數(shù)據(jù)的處理能力,同時(shí)還保持了傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)對(duì)SQL和ACID事務(wù)的支持。NewSQL的關(guān)注重點(diǎn)在于混合式(Hybird)數(shù)據(jù)庫(kù),更傾向于找尋不再區(qū)分OLTP和OLAP查詢(xún)的多模式數(shù)據(jù)庫(kù)構(gòu)建方案。

2016年,Andrew Pavlo與Matthew Aslett發(fā)表了論文《What’s Really New with NewSQL?》其中將NewSQL劃分為三個(gè)大類(lèi),分別是:

新架構(gòu)(NewArchitecture)

透明化分片中間件(Transparent Sharding Middleware)

云數(shù)據(jù)庫(kù)(Database-as-a-Service)

下面詳細(xì)講講這三大類(lèi):

1.新架構(gòu)立足分布式

新架構(gòu)NewSQL是全新的面向分布式架構(gòu)而設(shè)計(jì)的數(shù)據(jù)庫(kù)系統(tǒng)。 該系統(tǒng)一般使用share-nothing架構(gòu),具有多節(jié)點(diǎn)并發(fā)控制、高度容錯(cuò)的自動(dòng)化數(shù)據(jù)副本復(fù)制、流量控制及分布式查詢(xún)處理等特征。由于它們是天生面向分布式多節(jié)點(diǎn)而設(shè)計(jì)的系統(tǒng),因此處理查詢(xún)優(yōu)化和節(jié)點(diǎn)間通信協(xié)議的能力更加出色。

舉例來(lái)說(shuō),NewSQL數(shù)據(jù)庫(kù)的多數(shù)據(jù)節(jié)點(diǎn)間可以直接通信,無(wú)需依賴(lài)中心節(jié)點(diǎn)。 不過(guò)由于采用了全新的架構(gòu)設(shè)計(jì)方式和存儲(chǔ)引擎,并未經(jīng)過(guò)實(shí)踐驗(yàn)證,因此企業(yè)的技術(shù)選型者們格外謹(jǐn)慎。同時(shí),具有運(yùn)維新一代NewSQL經(jīng)驗(yàn)的工程師也鳳毛麟角,相比于關(guān)系型數(shù)據(jù)庫(kù),NewSQL當(dāng)前的使用者數(shù)量非常少。很多企業(yè)都會(huì)嘗試跟進(jìn)新架構(gòu)NewSQL,但尚未遷移至核心系統(tǒng)。

2.透明化分片中間件兼容性強(qiáng)

透明化分片中間件允許應(yīng)用將數(shù)據(jù)分片寫(xiě)入多數(shù)據(jù)節(jié)點(diǎn),但數(shù)據(jù)節(jié)點(diǎn)仍然采用面向單數(shù)據(jù)節(jié)點(diǎn)的關(guān)系型數(shù)據(jù)庫(kù)。透明化分片中間件使用中心組件來(lái)路由數(shù)據(jù)操作請(qǐng)求、協(xié)調(diào)事務(wù)、管理數(shù)據(jù)分布以及復(fù)制數(shù)據(jù)副本。整個(gè)集群對(duì)外是一個(gè)邏輯實(shí)例,應(yīng)用往往無(wú)需改動(dòng)即可平滑使用。

透明化分片中間件的核心優(yōu)勢(shì)是兼容性強(qiáng),它可以低成本地在系統(tǒng)現(xiàn)有的單機(jī)關(guān)系型數(shù)據(jù)庫(kù)與分片中間件之間切換,而無(wú)須開(kāi)發(fā)者進(jìn)行任何代碼上的改動(dòng)。

透明化分片中間件NewSQL能夠充分合理地在分布式場(chǎng)景下利用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的計(jì)算和存儲(chǔ)能力,而非實(shí)現(xiàn)一個(gè)全新的關(guān)系型數(shù)據(jù)庫(kù)。

因此,其既可以利用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的穩(wěn)定性和兼容性,又可以在其基礎(chǔ)之上增加分布式場(chǎng)景的處理方法。“在原有基礎(chǔ)上增加,而非顛覆”是這類(lèi)NewSQL產(chǎn)品的核心功能。 由于基于單數(shù)據(jù)節(jié)點(diǎn)的傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)是面向磁盤(pán)設(shè)計(jì)的,對(duì)于基于內(nèi)存的存儲(chǔ)管理以及并發(fā)控制不如重新設(shè)計(jì)的面向分布式的新架構(gòu)NewSQL高效。另外,SQL解析、查詢(xún)優(yōu)化等工作在中間件和數(shù)據(jù)庫(kù)中將會(huì)重復(fù)進(jìn)行,也會(huì)使整體運(yùn)行效率略遜于新架構(gòu)NewSQL。

在國(guó)內(nèi)的大中型互聯(lián)網(wǎng)企業(yè)中,這類(lèi)NewSQL十分流行,每個(gè)公司基本都有自己的數(shù)據(jù)庫(kù)中間件。但由于和公司內(nèi)部的業(yè)務(wù)系統(tǒng)耦合較重,因此成熟的開(kāi)源產(chǎn)品較少。目前進(jìn)入Apache基金會(huì)孵化器的Apache ShardingSphere是這類(lèi)產(chǎn)品的代表。

3.云數(shù)據(jù)庫(kù)無(wú)需考慮細(xì)節(jié)

最后一種類(lèi)型的NewSQL是由云計(jì)算公司所提供的云數(shù)據(jù)庫(kù)產(chǎn)品。

云數(shù)據(jù)庫(kù)的使用方無(wú)須自行維護(hù)數(shù)據(jù)庫(kù)及其硬件,而可以將全部數(shù)據(jù)托管至云平臺(tái)所提供的服務(wù)。使用方通過(guò)數(shù)據(jù)庫(kù)的URL連接至云端數(shù)據(jù)庫(kù),并通過(guò)API或操作儀表盤(pán)去操作和監(jiān)控系統(tǒng)。 云數(shù)據(jù)庫(kù)使用成本最低,工程師無(wú)須考慮數(shù)據(jù)庫(kù)的任何細(xì)節(jié)問(wèn)題,對(duì)中小企業(yè)來(lái)說(shuō)是理想的解決方案,不過(guò)對(duì)于巨大數(shù)據(jù)體量的公司來(lái)說(shuō),采用前兩種NewSQL的開(kāi)源或自研方案更加合適。 NewSQL雖然尚未成熟,但確實(shí)是面向未來(lái)的正確嘗試。三種NewSQL的關(guān)注點(diǎn)各不相同:

新架構(gòu)數(shù)據(jù)庫(kù)的關(guān)注點(diǎn)是徹底革新;

透明化分片中間件數(shù)據(jù)庫(kù)的關(guān)注點(diǎn)是增量;

云數(shù)據(jù)庫(kù)的關(guān)注點(diǎn)是屏蔽用戶(hù)使用細(xì)節(jié)。

雖然不同類(lèi)型的數(shù)據(jù)庫(kù)各有千秋,但它們的核心功能是類(lèi)似的。 而無(wú)論對(duì)于哪一種NewSQL而言,混合式(Hybird)數(shù)據(jù)庫(kù)都將是其未來(lái)的發(fā)展方向,當(dāng)不再區(qū)分OLTP和OLAP時(shí),開(kāi)發(fā)成本將會(huì)極大地降低。

百度智能云作為業(yè)內(nèi)佼佼者,能夠提供從關(guān)系型數(shù)據(jù)庫(kù)、NoSQL數(shù)據(jù)庫(kù),到NewSQL,以及數(shù)據(jù)庫(kù)管理服務(wù)等一整套數(shù)據(jù)庫(kù)產(chǎn)品及相關(guān)服務(wù),幾乎涵蓋各個(gè)領(lǐng)域,能夠幫助用戶(hù)從容應(yīng)對(duì)已經(jīng)到來(lái)的數(shù)據(jù)智能時(shí)代。

總結(jié)全文,尺有所短寸有所長(zhǎng),在數(shù)據(jù)爆發(fā)式增長(zhǎng)的今天,并不是誰(shuí)取代誰(shuí)的關(guān)系,而是要學(xué)會(huì)綜合運(yùn)用各種技術(shù),對(duì)癥下藥,讓最合適的技術(shù)應(yīng)用在最匹配的場(chǎng)景中,這樣才能在新時(shí)代游刃有余。

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。

2019-12-05
傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)、NoSQL、NewSQL,三者如何在云時(shí)代共處?
關(guān)系型數(shù)據(jù)庫(kù)由于存在時(shí)間長(zhǎng)久,因此針對(duì)每一種常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù),都能比較容易地招聘到相應(yīng)的數(shù)據(jù)庫(kù)管理員(DBA),以保證數(shù)據(jù)庫(kù)的穩(wěn)定性、完整性、安全性、并通過(guò)監(jiān)控和分析關(guān)系型數(shù)據(jù)庫(kù)的系統(tǒng)瓶頸提升設(shè)計(jì)的

長(zhǎng)按掃碼 閱讀全文