一、OldSQL數(shù)據(jù)庫(kù)
OldSQL數(shù)據(jù)庫(kù)泛指?jìng)鹘y(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),如Oracle、Sybase、SQLServer、DB2、MySQL、PostgreSQL等,以結(jié)構(gòu)化數(shù)據(jù)為處理對(duì)象,提供實(shí)時(shí)的、面向應(yīng)用的事務(wù)處理能力,支持標(biāo)準(zhǔn)SQL或PL/SQL。 OldSQL數(shù)據(jù)庫(kù)采用SMP(Symmetric Multi-Processing)對(duì)稱(chēng)多處理架構(gòu),匯聚多個(gè)服務(wù)器的一組CPU處理器,各CPU之間共享內(nèi)存、總線(xiàn)和存儲(chǔ)?梢酝ㄟ^(guò)增加CPU、內(nèi)存來(lái)提高性能,進(jìn)行Scale up的縱向擴(kuò)展,但由于是共享存儲(chǔ)IO帶寬有限,無(wú)法大規(guī)模擴(kuò)展,適合數(shù)據(jù)量在數(shù)十TB的應(yīng)用場(chǎng)景。
二、NewSQL數(shù)據(jù)庫(kù)
NewSQL泛指各種新的可擴(kuò)展、高性能關(guān)系型數(shù)據(jù)庫(kù),這類(lèi)數(shù)據(jù)庫(kù)不僅具有對(duì)海量結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)管理能力,還保持了傳統(tǒng)數(shù)據(jù)庫(kù)支持ACID和SQL等特性。 NewSQL數(shù)據(jù)庫(kù)工作在一個(gè)分布式集群的節(jié)點(diǎn)上,采用本地存儲(chǔ)(Share-nothing),每個(gè)節(jié)點(diǎn)擁有一個(gè)數(shù)據(jù)子集。NewSQL有一組節(jié)點(diǎn)用來(lái)做事務(wù)處理,這些節(jié)點(diǎn)接到特定的SQL查詢(xún)后,會(huì)把它所需的數(shù)據(jù)從本地取回來(lái)后執(zhí)行SQL查詢(xún),再返回結(jié)果。
與OldSQL數(shù)據(jù)庫(kù)共享存儲(chǔ)相比,NewSQL數(shù)據(jù)庫(kù)采用本地存儲(chǔ),無(wú)共享存儲(chǔ)I/O限制,可以通過(guò)添加節(jié)點(diǎn)來(lái)Scale out橫向擴(kuò)展,節(jié)點(diǎn)數(shù)量可以達(dá)到數(shù)百臺(tái),數(shù)據(jù)量可以達(dá)到PB級(jí)。
NewSQL系統(tǒng)雖然在的內(nèi)部結(jié)構(gòu)變化很大,但是它們有兩個(gè)顯著的共同特點(diǎn):(1)它們都支持關(guān)系數(shù)據(jù)模型;(2) 它們都使用SQL作為其主要的接口。
NewSQL數(shù)據(jù)庫(kù)有2種存儲(chǔ)方式,即行存儲(chǔ)和列存儲(chǔ)。 行存儲(chǔ)和列存儲(chǔ)方式是指數(shù)據(jù)在磁盤(pán)中按照行或者列的方式進(jìn)行組織和物理存儲(chǔ)。行存儲(chǔ)架構(gòu)和列存儲(chǔ)架構(gòu)的數(shù)據(jù)庫(kù)分別適用于不同的應(yīng)用場(chǎng)景,具備各自的優(yōu)劣勢(shì)。
·行存儲(chǔ)
行存儲(chǔ)數(shù)據(jù)庫(kù)適合增加、插入、刪除、修改的事務(wù)處理處理等。以“修改”為例,數(shù)據(jù)庫(kù)先把需要修改的指定記錄從硬盤(pán)讀取到內(nèi)存,對(duì)記錄進(jìn)行修改,然后再?gòu)膬?nèi)存保持回到硬盤(pán)。由于只需要對(duì)指定的記錄讀取到內(nèi)存和寫(xiě)入硬盤(pán)操作,所以I/O最小,效率最高。
但是,行存數(shù)據(jù)庫(kù)對(duì)列的統(tǒng)計(jì)分析卻需要耗費(fèi)大量的I/O。對(duì)指定列進(jìn)行統(tǒng)計(jì)分析時(shí),需要把整張表讀取到內(nèi)存,然后再逐行對(duì)列進(jìn)行讀取分析操作。因此,表結(jié)構(gòu)越大,I/O效率越低。
·列存儲(chǔ)
列存儲(chǔ)數(shù)據(jù)庫(kù)對(duì)增加、插入、刪除、修改的事務(wù)處理I/O高、效率低,以“修改”為例,列存數(shù)據(jù)庫(kù)先把需要修改表的所有列數(shù)據(jù)從硬盤(pán)讀取到內(nèi)存組合成完整的表,然后對(duì)指定行記錄進(jìn)行修改,再按照列的方式保存回到硬盤(pán)。因此,表結(jié)構(gòu)越大,I/O效率越低。
但是列存儲(chǔ)非常適合做統(tǒng)計(jì)查詢(xún)類(lèi)操作,統(tǒng)計(jì)分析一般是針對(duì)指定列進(jìn)行,只需要把指定列讀取到內(nèi)存進(jìn)行操作,所以I/O最小,效率最高。
列存儲(chǔ)還具備建立索引來(lái)優(yōu)化統(tǒng)計(jì)查詢(xún)性能。每個(gè)數(shù)據(jù)包在加載數(shù)據(jù)時(shí)自動(dòng)建立索引,索引是對(duì)每個(gè)列存數(shù)據(jù)包的描述,包含基本的統(tǒng)計(jì)信息,如:最大值、最小值、平均值等,在數(shù)據(jù)查詢(xún)時(shí)只需要解包就能得到統(tǒng)計(jì)值,可進(jìn)一步降低I/O,對(duì)復(fù)雜查詢(xún)的優(yōu)化效果明顯。索引本身占空間很少,擴(kuò)展性很好,建立索引后無(wú)膨脹。建立索引的速度快,后續(xù)的數(shù)據(jù)包建立索引的速度不會(huì)受到前面數(shù)據(jù)包的影響。 ..
|