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