文章轉載自「開發者圓桌」一個關於開發者入門、進階、踩坑的微信公衆號數據庫
定義
微信
列式存儲(Column-based)是相對於傳統關係型數據庫的行式存儲(Row-based)來講的。簡單來講二者的區別就是如何組織表。分佈式
將表放入存儲系統中有兩種方法,而咱們絕大部分是採用行存儲的。行存儲法是將各行放入連續的物理位置,這很像傳統的記錄和文件系統。列存儲法是將數據按照列存儲到數據庫中,與行存儲相似,下圖是兩種存儲方法的圖形化解釋。ide
應用行式存儲的數據庫系統稱爲行式數據庫,同理應用列式存儲的數據庫系統稱爲列式數據庫。隨着列式數據庫的發展,傳統的行式數據庫加入了列式存儲的支持,造成具備兩種存儲方式的數據庫系統。spa
傳統的關係型數據庫,如Oracle、DB二、MySQL、SQL SERVER等採用行式存儲法,固然傳統的關係型數據庫也在不斷髮展中。隨着Oracle 12c推出了in memory組件,使得Oracle數據庫具備了雙模式數據存放方式,從而可以實現對混合類型應用的支持:傳統的以行形式保存的數據知足OLTP應用;列形式保存的數據知足以查詢爲主的OLAP應用。設計
新興的Hbase、HP Vertica、EMC Greenplum等分佈式數據庫採用列式存儲,固然這些數據庫也有對行式存儲的支持好比HP Vertica。orm
隨着傳統關係型數據庫與新興的分佈式數據庫不斷的發展,列式存儲與行式存儲會不斷融合,數據庫系統會呈現雙模式數據存放方式,這也是商業競爭的須要。blog
區別開發
爲啥列存儲能夠大幅下降系統的I/O呢?get
列式存儲的主要優勢之一就是能夠大幅下降系統的I/O,尤爲是在海量數據查詢時,I/O向來是系統的主要瓶頸之一。經過下面這張圖,相信你們可以完全明白這一點。
應用場景
在比較了行式數據庫與列式數據庫以後,咱們更關心的是如何根據業務場景須要選擇對應的數據庫系統。
行式更適合OLTP,好比傳統的基於增刪改查操做的應用。列式更適合OLAP,很是適合於在數據倉庫領域發揮做用,好比數據分析、海量存儲和商業智能;涉及不常常更新的數據。
因爲設計上的不一樣,列式數據庫在並行查詢處理和壓縮上更有優點。並且數據是以列爲單元存儲,徹底不用考慮數據建模或者說建模更簡單了。要查詢計算哪些列上的數據,直接讀取列就行。
最後咱們須要務實的指出,沒有萬能的數據庫,列式數據庫也並不是萬能,只不過給DBA提供了更多的選擇,DBA需根據本身的應用場景自行選擇。