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