一分钟搞懂列式与行式数据库

文章转载自「开发者圆桌」一个关于开发者入门、进阶、踩坑的微信公众号数据库

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需根据本身的应用场景自行选择。