一、列式數(shù)據(jù)庫與行式數(shù)據(jù)庫主要區(qū)別
列式存儲(Column-based)是相對于傳統(tǒng)關系型數(shù)據(jù)庫的行式存儲(Row-based)來說的。簡單來說兩者的區(qū)別就是如何組織表。
將表放入存儲系統(tǒng)中有兩種方法,而我們絕大部分是采用行存儲的。行存儲法是將各行放入連續(xù)的物理位置,這很像傳統(tǒng)的記錄和文件系統(tǒng)。列存儲法是將數(shù)據(jù)按照列存儲到數(shù)據(jù)庫中,與行存儲類似。
應用行式存儲的數(shù)據(jù)庫系統(tǒng)稱為行式數(shù)據(jù)庫,同理應用列式存儲的數(shù)據(jù)庫系統(tǒng)稱為列式數(shù)據(jù)庫。隨著列式數(shù)據(jù)庫的發(fā)展,傳統(tǒng)的行式數(shù)據(jù)庫加入了列式存儲的支持,形成具有兩種存儲方式的數(shù)據(jù)庫系統(tǒng)。
傳統(tǒng)的關系型數(shù)據(jù)庫,如Oracle、DB2、MySQL、SQL SERVER等采用行式存儲法,當然傳統(tǒng)的關系型數(shù)據(jù)庫也在不斷發(fā)展中。隨著Oracle 12c推出了in memory組件,使得Oracle數(shù)據(jù)庫具有了雙模式數(shù)據(jù)存放方式,從而能夠實現(xiàn)對混合類型應用的支持:傳統(tǒng)的以行形式保存的數(shù)據(jù)滿足OLTP應用;列形式保存的數(shù)據(jù)滿足以查詢?yōu)橹鞯腛LAP應用。
新興的Hbase、HP Vertica、EMC Greenplum等分布式數(shù)據(jù)庫采用列式存儲,當然這些數(shù)據(jù)庫也有對行式存儲的支持比如HP Vertica。
隨著傳統(tǒng)關系型數(shù)據(jù)庫與新興的分布式數(shù)據(jù)庫不斷的發(fā)展,列式存儲與行式存儲會不斷融合,數(shù)據(jù)庫系統(tǒng)會呈現(xiàn)雙模式數(shù)據(jù)存放方式,這也是商業(yè)競爭的需要。
延伸閱讀:
二、行式數(shù)據(jù)庫與列式數(shù)據(jù)庫應用場景
行式更適合OLTP,比如傳統(tǒng)的基于增刪改查操作的應用。列式更適合OLAP,非常適合于在數(shù)據(jù)倉庫領域發(fā)揮作用,比如數(shù)據(jù)分析、海量存儲和商業(yè)智能;涉及不經(jīng)常更新的數(shù)據(jù)。
由于設計上的不同,列式數(shù)據(jù)庫在并行查詢處理和壓縮上更有優(yōu)勢。而且數(shù)據(jù)是以列為單元存儲,完全不用考慮數(shù)據(jù)建?;蛘哒f建模更簡單了。要查詢計算哪些列上的數(shù)據(jù),直接讀取列就行。
最后我們需要務實的指出,沒有使用廣泛的數(shù)據(jù)庫,列式數(shù)據(jù)庫也并非使用廣泛,只不過給DBA提供了更多的選擇,DBA需根據(jù)自己的應用場景自行選擇。