1 列式存储和行式存储的真正区别

参考文献: 列式存储和行式存储的真正区别_过往记忆大数据_公众号文章

  • 一般原因:查询需要的字段时,Column-Store 只需读取需要的列,Row-Store读一条记录会把 所有字段都读出来。Column-Stroe在IO上效率更高。

  • 块遍历
      单记录遍历:读出行,对每行抽取出需要的列,再对这些列调用相应的函数。函数调用的次数与数据的条数为1:11:11:1。
      块遍历:批量处理,一次性处理多条数据,函数调用次数下降,性能提高。
    .
      块遍历和单记录遍历是两种遍历方法,Column-Store和Row-Store都可以使用。区别是:对于Column-Store,块遍历已经成为共识,大家都这样做。对于Row-Store,需要用case-by-case实现。
      并且Column-Store的列值在字节意义上等宽时(例如,每个列都是数字类型),还可以进一步提高性能。因为从一个块里取值时可以直接用数组下标获取数据。以数组的方式我们还可以用现代CPU的一些优化措施比如SIMD(Single Instruction Multiple Data)来实现并行化执行,进一步提高性能。

  • 压缩
    压缩就是对数据进行更高效的编码,从而用更少的空间表达相同的意思。
    而能够进行更高效的编码的前提是数据要有某种规律。比如很多数据一样,或者数据的类型一样。
    Column把一列数据保存在一起,而一列的数据类型相同。当然比Row-Store把一条记录里面不同类型的字段值保存在一起,更有规律,更有规律意味着可以有更高的压缩比。
    数据占用的硬盘空间越少,查询时 IO的时间就越少
    数据压缩之后,要进行处理很多时候也需要解压缩,解压缩也需要花时间,所以一般需要在压缩比和解压速度之间做一个权衡
    有的场景下,可以避免解压缩,直接在压缩数据的格式上进行计算,这样就可以进一步提升性能 。
    最好对数据排序之后,再对Column-Store使用压缩进行优化。如果不经过排序,数据就没那么“有规律”,也就达不到最好的压缩比。

  • 延迟物化
    什么是物化?为了把底层存储格式与用户查询表达的意思对应起来,需要在查询生命周期的某一个时间点,将数据转换成Row的形式,这在Column-Store里面被称为物化

    延迟物化就是尽量把物化的时机延迟到查询生命周期的后期。这意味着在查询生命周期的前期,查询执行的模型不是关系代数,而是基于Column。举例:

select name
from person
where id > 10 and age > 20

一般的做法,取出三列,立刻物化成一行行的Person数据(同一个Person在三列里的数据,抽取出来构成一行),然后应用过滤条件(id > 10 and age > 20)选出对应的行,再从剩下的行中抽出需要的字段(name)。

延迟物化,先不拼出行式数据,直接在 Column数据(id、age)上分别应用两个过滤条件,得到两个满足过滤条件的bitmap,然后两个bitmap做位与(bitwise AND)得到同时满足两个条件的所有的bitmap(Intersected bitmap,position)。因为需要的只是name字段,所以下一步拿着这些position对name字段的数据进行过滤得到最终的结果。

可以发现整个过程中压根没有进行物化操作,从而可以提高效率。

  • Invisible Join
    这是论文《Column-Stores vs. Row-Stores: How Different Are They Really?》的最新成果,笔者坦白,我没看懂。可以参考文献列式存储和行式存储它们真正的区别是什么,也可以直接查看原论文《Column-Stores vs. Row-Stores: How Different Are They Really?》。路漫漫其修远兮,吾将上下而求索,与君共勉吧~

列式存储和行式存储的真正区别相关推荐

  1. 列式存储和行式存储它们真正的区别是什么

    本文是<Column-Stores vs. Row-Stores: How Different Are They Really?>论文的读后感,作者徐明明.原文链接:https://zhu ...

  2. 什么是列式存储和行式存储

    一.列式存储和行式存储 列式存储是指一列中的数据在存储介质中是连续存储的: 行式存储是指一行中的数据在存储介质中是连续存储的. 简单的说,可以把列式数据库认为是每一列都是一个表,这个表只有一列,如果只 ...

  3. 列式数据库与行式数据库

    什么是列式数据库? 列式数据库是以列相关存储架构进行数据存储的数据库.卢东明认为数据库发展已经到了一个新阶段,数据库市场需要细分,行式数据库不再满足所有的需求,而有很多需求需要通过内存数据库和列式数据 ...

  4. 为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪

    摘要: 1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的.简单来说两者的区别就是如何组织表 ...

  5. 列式存储和行式存储有什么区别?

    写在前面 本文隶属于专栏<100个问题搞定大数据理论体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定大数据理 ...

  6. Hbase与Oracle比较(列式数据库与行式数据库)

    1 主要区别 1.1.Hbase适合大量插入同时又有读的情况 1.2. Hbase的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间. Hbase本质上只有一种操作,就是插入,其更新操作是插入一个 ...

  7. 列式数据库和行式数据库区别

    转载自:https://blog.csdn.net/nieson2012/article/details/79551337 列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要 ...

  8. 列式数据库和行式数据库的区别

    前言 最近学习了hbase,其中涉及的到知识就是hbase采用了列式存贮,而用惯了mysql的我当然一脸懵逼,于是有了本篇文章,本文不是论文,所有涉及的知识点他人都有讲,我只是为了记录一下,如果想要看 ...

  9. 列式存储 V.S. 行式存储

    列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93 列式存储与行式存储 http://my ...

最新文章

  1. SQL SERVER 触发器示例
  2. NSLayoutConstraint
  3. linux下git的简单运用
  4. java图片上传下载_java web 文件上传与下载
  5. 前端开发-4-HTML-tableform表单控制 标签
  6. lucene分布式索引
  7. python语言map函数及map object at 乱码错误
  8. 【ElasticSearch】Es 源码之 NodeConnectionsService 源码解读
  9. Socket 实例之透析java,C#的互操作
  10. 小菜面试 String 篇 之 统计一个字符串中数字,字母,的个数
  11. ASP.NET MVC2.0在Tab页中实现异步无刷新分页
  12. Android 端天气预报APP的实现(二)阿里云天气预报API的获取
  13. 数据库中的日期相减_sql中两个日期相减
  14. fast路由器pppoe连接服务器无响应,迅捷路由器系统日志如何排除PPPOE拨号故障
  15. 阿里云联合浙江大学举办首届数智服务创新挑战赛!
  16. 计算机按音乐视频,电脑怎么提取视频中的音乐
  17. 计算机网络实验报告 静态路由的配置
  18. pdf压缩大小,一个简单的pdf压缩方法
  19. 从前端Vue/Axios到后端交互--浅谈Vue生命周期、Ajax调用
  20. vue更新头像图片不更新

热门文章

  1. slab分配器学习系列之存储桶
  2. foxmail登录企业邮箱的设置
  3. JTS 空间数据关系分析
  4. 计算机文档管理系统,标准文档管理系统
  5. 天然气分布式能源系统在数据中心领域的应用
  6. 蓝牙耳机哪个牌子音质好?盘点音质好的国产蓝牙耳机品牌
  7. 算法笔记_070-BellmanFord算法简单介绍(Java)
  8. JAVA将数字钱数转换为大写
  9. 金融风控指标-vintage、迁移率、滚动率、入催率、FPD、DPD
  10. Oracle 19C RAC 安装