列式存储和行式存储

行式存储数据库和列式存储数据库,随着业务深入,技能增长,经常会碰到,今天来理解一下。

列式存储(Clolumn-Based)和行式存储(Row-Based)都是相对于对方的,他们的区别是在磁盘的存储方式不同,所以在读写数据时,方式不同,以至于他们的适用场景也都不同。

列式存储数据库主要包括:HBase,ClickHouse,Druid,HP Vertica(也支持行式存储)
行式存储数据库主要包括传统关系型数据库:MySQL,Oracle,DB2,SQLServer,PostgreSQL

因为是磁盘存储方式不同,所以先跳出固有思维来理解,想象没有excel,没有数据库,身在古代,西门大官人如何记录自己身在各地的红颜知己的信息呢?先直观的看一下需要记录哪些数据。

序号地址腰围长相姓名
1阳谷县306潘金莲
2郓城县406阎惜娇
3蓟州506潘巧云
4京城308李师师

行式存储

西门大官人没有excel,只有纸和笔记录,所以他先写成如下这种行式存储的方式。在什么地方找谁,找什么样的,奶茶喝腻了,换换口味,一目了然。
在这里插入图片描述
这样,现在要找蓟州的红颜,就把所有的扫描查看一遍,找到蓟州的红颜。想找6分的红颜,就再扫描一遍,想找什么就扫描一遍。
这就是一个标准的行式存储,数据按照一行一行的存储,有什么特点呢:

  1. 数据按行存储,直观查看一条数据的全部信息,修改方便(OLTP)
  2. 查询需要一条一条的查看(全表扫描),费事,费时
  3. 创建索引、物化视图消耗时间,资源。
    后来,大官人要记录管理的对象越来越多是,这个又不能交给别人去记录,只能亲力亲为,问题出现了,大官人的数据已经记录成一本书了,每次瘾发作了,先看一本书,查看地址,是不是体验特别不好?这没有难道他,他又想到了一种记录方式

列式存储

将序号和行号写到特定的几张纸上,将地址和行号写在特定的几张纸上,将腰围和行号写在特定的几张纸上,将姓名和行号写在指定的几张纸上。
在这里插入图片描述
这样,想查找腰围30的,只需要查找腰围的那几张纸,找到行号,再查找记录地址的几张纸,查看地址就可以去哈皮了。体验似乎好起来了。
这样存储有什么特点呢:

  1. 列式存储。
  2. 只查询需要的字段,快速。(OLAP)
    3,查询某一条数据的全部信息要查询所有的纸再拼接起来,不方便,修改一条数据,要修改多张纸,不方便。

总结

行式存储

  1. 数据是按行存储的
  2. 没有索引时,查询使用大量I/O,大数据量是表现不佳。
  3. 建立索引和物化视图可以优化,但是需要花费大量时间和资源。
  4. 面对查询的需求,数据库必须被大量膨胀才能满足性能需求。

列式存储

  1. 数据按列存储–每一列单独存放 。
  2. 数据即是索引。
  3. 只访问查询涉及的列–大量降低系统IO 。
  4. 每一列由一个线索来处理–查询的并发处理。
  5. 数据类型一致,数据特征相似–高效压缩。

行式存储适用于OLTP,而列式存储适用于大数据场景下的OLAP。实际生产活动中,按照使用场景,进选择合适的存储引擎,发挥组件的最大优势。

(完)(^_^)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值