列存儲概述
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,如Oracle、DB2、SQL Server、MySQL、Informix等都采用行存儲。在行式存儲中,數(shù)據(jù)表中的每條數(shù)據(jù)以記錄行的形式把數(shù)據(jù)存放在文件系統(tǒng)中,對于一條數(shù)據(jù)記錄,在物理存儲時也是相鄰位置存儲的,相對應(yīng)的操作也是基于行的基礎(chǔ)上對數(shù)據(jù)進(jìn)行操作。
行存數(shù)據(jù)庫適用于OLTP場景,主要用于數(shù)據(jù)的插入、更新、刪除、數(shù)據(jù)一致性操作等操作。而在使用傳統(tǒng)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)分析時,經(jīng)常遇到多表關(guān)聯(lián)的場景,需要根據(jù)篩選字段獲取大量的數(shù)據(jù),并進(jìn)行join操作。此時,對磁盤IO產(chǎn)生了巨大的壓力。因此,數(shù)據(jù)庫市場上產(chǎn)生了列式數(shù)據(jù)庫,比如Hbase、HP Vertica、EMC Greenplum等。
?列存儲原理
? ? 在列存儲數(shù)據(jù)庫中,每張邏輯數(shù)據(jù)表橫向分成多個數(shù)據(jù)列,每個數(shù)據(jù)列縱向分成多個存儲單元。
列存儲的技術(shù)特點包括:
??表的每一列物理上分開存儲;
??每一列是以數(shù)據(jù)包(DC)為單位組織的;
??只有訪問查詢所涉及的列產(chǎn)生I/O;
??查詢沒有涉及的列不需要訪問,不產(chǎn)生I/O;
??表列數(shù)越多,列存I/O效率越高,越有性能優(yōu)勢。
很顯然,列存儲在寫入效率、保證數(shù)據(jù)完整性上都不如行存儲,它的優(yōu)勢是在數(shù)據(jù)讀取過程中,不會產(chǎn)生冗余數(shù)據(jù),這對數(shù)據(jù)完整性要求不高的大數(shù)據(jù)處理領(lǐng)域尤為重要。
列存儲適用場景
一般來說,一個OLAP類型的查詢可能需要訪問幾百萬甚至幾十億個數(shù)據(jù)行,且該查詢往往只關(guān)心“時間、商品、銷量”等少數(shù)幾個數(shù)據(jù)列。而列式數(shù)據(jù)庫只需要讀取存儲著“時間、商品、銷量”的數(shù)據(jù)列,而行式數(shù)據(jù)庫需要讀取所有的數(shù)據(jù)列。因此,列式數(shù)據(jù)庫極大地提高了OLAP大數(shù)據(jù)量查詢的效率。
結(jié)合列存數(shù)據(jù)庫的特點,適用場景主要包括:
歡迎大家關(guān)注公號“SalesEngineers”,獲取更多資訊。