行式存储与列式存储的区别

存储方式对比

行式存储就是每一行的所有数据存在一个block中,各个block之间连续存储;列式存储就是每一列的所有数据存在一起,不同列之间可以分开存储。

MySQL中的infobright存储引擎是列式存储,InnoDB和MyISAM存储引擎是行式存储。

列式存储是非关系型数据库中的一种,非关系型数据库的目的在于去掉关系数据库的关系型特性,使得数据之间无关系,使得扩展性高。非关系型数据库一般具有大数据量、高性能的特点,典型的有Key-Value键值存储数据库等。

优缺点

行式存储

  • 行式存储的优点

    • 因为每一行的所有字段都存在一起,因此对数据进行插入(INSERT)和修改(UPDATE)操作很方便。
    • 整表查询比较方便,可以很快将整张表组装出来。
  • 行式存储的缺点

    • 查询(SELECT)时如果涉及到某条数据,需要把该行数据所有内容都读取到内存中,即使只SELECT一两个字段也要把整行数据都读进来。
    • 由于上面的原因,读取数据的时候硬盘寻址范围很大。
    • 要加速查询的话需要建立索引,建立索引需要花费很多时间。
    • 空值也要占固定的空间。

列式存储

  • 列式存储的优点
    • 每一列单独存储,因此仅SELECT个别列的时候,可以仅读取需要的那几个列,相当于为每一列都建立了索引。
    • 由于上面的原因,对每一列进行统计分析(投影操作)就很方便,比如统计某一列中某个数据出现的频次,某一列的均值,排序等。因此列式存储通常为决策分析的场景服务,且通常都是大数据。
    • 由于仅对需要的列进行查找,因此硬盘寻道范围小。
    • 数据压缩。列式存储的时候可以为每一列创建一个字典,存储的时候就仅存储数字编码即可,降低了存储空间需求,如下面的图片所示。比如某网站存储所有访问该网站的用户的名字、IP、性别、国家等,存储的时候每一列可以生成一个字典,比如国家,数据库中每个不同的国家在字典中就有一个编码,存储的时候就存储那个编码就行,不需要每个数据都存储完整的字符串。
  • 列式存储的缺点
    • SELECT完成时,被选中的数据需要重新组装。
    • 插入(INSERT)和修改(UPDATE)操作比较麻烦。

适用场景对比

行式存储用于存储关系型数据,用于使用数据的时候需要经常用到数据之间的依赖关系的场景,即读取的时候需要整行数据或者整行中大部分列的数据,需要经常用到插入、修改操作,比如存储用户的注册信息等。

列式存储适合分布式数据库和数据仓库,适合于对大量数据进行统计分析,列与列之间关联性不强,仅进行插入和读取操作的场景,如网站流量统计、用户行为分析等。

参考

https://blog.csdn.net/qq_26091271/article/details/51778675

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值