大家好,我是大D。

不知是否有小伙伴们疑问,为什么列式存储会广泛地应用在 OLAP 领域,和行式存储相比,它的优势在哪里?今天我们一起来对比下这两种存储方式的差别。

其实,列式存储并不是一项新技术,最早可以追溯到 1983 年的论文 Cantor。然而,受限于早期的硬件条件和应用场景,传统的事务型数据库(OLTP)如 Oracle、MySQL 等关系型数据库都是以行的方式来存储数据的。

直到近几年分析型数据库(OLAP)的兴起,列式存储这一概念又变得流行,如 HBase、Cassandra 等大数据相关的数据库都是以列的方式来存储数据的。

行式存储的原理与特点

对于 OLAP 场景,大多都是对一整行记录进行增删改查操作的,那么行式存储采用以行的行式在磁盘上存储数据就是一个不错的选择。

当查询基于需求字段查询和返回结果时,由于这些字段都埋藏在各行数据中,就必须读取每一条完整的行记录,大量磁盘转动寻址的操作使得读取效率大大降低。

举个例子,下图为员工信息emp表。

数据在磁盘上是以行的形式存储在磁盘上,同一行的数据紧挨着存放在一起。

对于 emp 表,要查询部门 dept 为 A 的所有员工的名字。

select name from emp where dept = A

由于 dept 的值是离散地存储在磁盘中,在查询过程中,需要磁盘转动多次,才能完成数据的定位和返回结果。

列式存储的原理与特点

对于 OLAP 场景,一个典型的查询需要遍历整个表,进行分组、排序、聚合等操作,这样一来行式存储中把一整行记录存放在一起的优势就不复存在了。而且,分析型 SQL 常常不会用到所有的列,而仅仅对其中某些需要的的列做运算,那一行中无关的列也不得不参与扫描。

然而在列式存储中,由于同一列的数据被紧挨着存放在了一起,如下图所示。

那么基于需求字段查询和返回结果时,就不许对每一行数据进行扫描,按照列找到需要的数据,磁盘的转动次数少,性能也会提高。

还是上面例子中的查询,由于在列式存储中 dept 的值是按照顺序存储在磁盘上的,因此磁盘只需要顺序查询和返回结果即可。

列式存储不仅具有按需查询来提高效率的优势,由于同一列的数据属于同一种类型,如数值类型,字符串类型等,相似度很高,还可以选择使用合适的编码压缩可减少数据的存储空间,进而减少IO提高读取性能。


总的来说,行式存储和列式存储没有说谁比谁更优越,只能说谁更适合哪种应用场景。

另外,非常欢迎大家扫描下方二维码,加我V信:Abox_0226,备注「进群」。
有关大数据技术的问题在群里一起探讨。

为什么列式存储会被广泛用在 OLAP 中?相关推荐

  1. 为什么 OLAP 需要列式存储

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  2. 几张图看懂列式存储(转)

    阅读目录 1 为什么要按列存储 2补充:数据压缩 3查询执行性能 add by zhj: 终于明白了什么是列式存储,什么是行式存储.这跟数据在存储介质中的存储结构有关, 列式存储是指,一列中的数据在存 ...

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

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

  4. 五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据

    五大存储模型关系模型.键值存储.文档存储.列式存储.图形数据 时间:2014-06-12 16:15来源:知行网www.zhixing123.cn 编辑:麦田守望者 昨天跟一同事讨论Sybase是不是 ...

  5. 5分钟图解Hbase列式存储

    作者 | 李新杰 来源 | 微信公众号"编程新说" 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了,李四王五赵六的行都没有填满. 因为这 ...

  6. ElasticSearch探索之路(四)索引原理:倒排索引、列式存储、Fielddata、索引压缩、联合索引

    文章目录 倒排索引 Term dictionary与Term index 列式存储--Doc Values Fielddata 索引压缩 FOR编码 Roaring Bitmaps 联合索引 倒排索引 ...

  7. 【转】几张图看懂列式存储

    几张图看懂列式存储 转载于:https://www.cnblogs.com/apeway/p/10870211.html

  8. 用户关系表 存储_列式存储系列(一)CStore

    作者:辛庸,阿里巴巴计算平台事业部 EMR 技术专家.Apache Hadoop,Apache Spark commiter.对 Hadoop.Spark.Hive.Druid 等大数据组件有深入研究 ...

  9. tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!

    MySQL是目前使用最广的开源数据库,不管从装机量.使用人群.专职人员.社区发展,还是基于MySQL的其他分支,都是当之无愧的No.1. 本文将从以下4个方面,带你搞透MySQL体系结构与存储引擎. ...

最新文章

  1. 【转】js实现复制到剪贴板功能,兼容所有浏览器
  2. python las转txt
  3. 云时代的安全解读:云安全≠云计算安全
  4. IDEA解决sun.misc.BASE64Encoder找不到jar包的解决方法
  5. 【Express】 —利用 Express 托管静态文件
  6. linux 多线程 pthread_create返回11,pthread_create返回11解决方法
  7. 【图像压缩】基于matlab小波变换图像压缩【含Matlab源码 879期】
  8. java网站后台管理系统_java网站后台管理系统
  9. Last-Modified和Etag
  10. 银行不良资产证券化是利好还是利空?
  11. 安装RSF自动化环境
  12. 分类计数原理与分步计数原理_分类加法计数原理与分步乘法计数原理的解题策略之一...
  13. 实例61小写字母转大写
  14. python rsa加密解密_RSA加密解密(python版)
  15. 一种的STM32的应用喂狗方法
  16. git之合并分支|git如何合并分支
  17. [总结]高效能人士的七个习惯
  18. 2012年08月20日
  19. 玩转京东支付(python)
  20. 程序员发帖引争议!公务员香吗?哪来的优越感?

热门文章

  1. VMCentOS7安装切换国内源
  2. 一文刨析C/C++全局常量的定义
  3. Linux安装X11实现GUI
  4. Java--判断语句
  5. VS2015中新建项目后,无法添加新的源文件头文件
  6. NPOI操作Excel 002:读取Excel
  7. js前端录音下载wav本地播放导出file
  8. 华为eNSP:静态路由
  9. linux 三剑客之grep
  10. 理解什么是真正的并发数