一分鐘搞懂列式與行式數據庫

文章轉載自「開發者圓桌」一個關於開發者入門、進階、踩坑的微信公衆號數據庫

wKioL1i5Ck7AkeuMAAChGHetiEM164.jpg


定義
微信


列式存儲(Column-based)是相對於傳統關係型數據庫的行式存儲(Row-based)來講的。簡單來講二者的區別就是如何組織表。分佈式


將表放入存儲系統中有兩種方法,而咱們絕大部分是採用行存儲的。行存儲法是將各行放入連續的物理位置,這很像傳統的記錄和文件系統。列存儲法是將數據按照列存儲到數據庫中,與行存儲相似,下圖是兩種存儲方法的圖形化解釋。ide

wKioL1jc4CSRbB1dAADH_buBxYw907.png


應用行式存儲的數據庫系統稱爲行式數據庫,同理應用列式存儲的數據庫系統稱爲列式數據庫。隨着式數據庫的發展,傳統的行式數據庫加入了列式存儲的支持,造成具備兩種存儲方式的數據庫系統。spa


傳統的關係型數據庫,如Oracle、DB二、MySQL、SQL SERVER等採用行式存儲法,固然傳統的關係型數據庫也在不斷髮展中。隨着Oracle 12c推出了in memory組件,使得Oracle數據庫具備了雙模式數據存放方式,從而可以實現對混合類型應用的支持:傳統的以行形式保存的數據知足OLTP應用;列形式保存的數據知足以查詢爲主的OLAP應用。設計


新興的Hbase、HP Vertica、EMC Greenplum等分佈式數據庫採用列式存儲,固然這些數據庫也有對行式存儲的支持好比HP Vertica。orm


隨着傳統關係型數據庫與新興的分佈式數據庫不斷的發展,列存儲與行存儲會不斷融合,數據庫系統會呈現雙模式數據存放方式,這也是商業競爭的須要。blog


區別開發


wKiom1jc4DfTBPcfAADTds9z82s887.jpg


爲啥列存儲能夠大幅下降系統的I/O呢?get


列式存儲的主要優勢之一就是能夠大幅下降系統的I/O,尤爲是在海量數據查詢時,I/O向來是系統的主要瓶頸之一。經過下面這張圖,相信你們可以完全明白這一點。

wKioL1jc4JmgKceqAAM8bLpflCo039.png


應用場景


在比較了行式數據庫與列式數據庫以後,咱們更關心的是如何根據業務場景須要選擇對應的數據庫系統。


行式更適合OLTP,好比傳統的基於增刪改查操做的應用。列式更適合OLAP,很是適合於在數據倉庫領域發揮做用,好比數據分析、海量存儲和商業智能;涉及不常常更新的數據。


因爲設計上的不一樣,列式數據庫在並行查詢處理和壓縮上更有優點。並且數據是以列爲單元存儲,徹底不用考慮數據建模或者說建模更簡單了。要查詢計算哪些列上的數據,直接讀取列就行。


最後咱們須要務實的指出,沒有萬能的數據庫,列式數據庫也並不是萬能,只不過給DBA提供了更多的選擇,DBA需根據本身的應用場景自行選擇。

相關文章
相關標籤/搜索