列式存储好处_按行优先存储和按列优先存储

列式存储好处_按行优先存储和按列优先存储大家好,我是大D。 不知是否有小伙伴们疑问,为什么列式存储会广泛地应用在 OLAP 领域,和行式存储相比,它的优势在哪里?今天我们一起来对比下这两种存储方式的差别。 其实,列式存储并不是一项新技术,最

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

大家好,我是大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提高读取性能。

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

非常欢迎大家加我微信:Abox_0226,备注「进群」,有关大数据技术的问题在群里一起探讨。

原文地址:https://www.cnblogs.com/datadance/archive/2022/05/16/16277888.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5250.html

(0)
上一篇 2023-05-17 11:30
下一篇 2023-05-17

相关推荐

  • Python字典遍历

    Python字典遍历Python是一种解释型、面向对象、动态数据类型的高级编程语言,与其他编程语言相比,Python的优势在于语法简洁、易读易写。Python内建了字典(Dictionary)数据类型,字典是一种可变的键值对集合,每个键与其相应值之间是一一对应的关系。

    2024-04-14
    84
  • centos7 仅安装mysql7客户端

    centos7 仅安装mysql7客户端centos7 仅安装mysql客户端 1.安装 rpm源 rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noa…

    2023-03-08
    153
  • 获取数据表中列的描述值怎么算_数据整理

    获取数据表中列的描述值怎么算_数据整理前面有写过《MS SQL为字段添加说明》https://www.cnblogs.com/insus/p/12106589.html 现如今,我们获取这些字段的描述值。 先来看一句SELECT语句: S

    2022-12-30
    150
  • 用Python编写自定义界面的库

    用Python编写自定义界面的库Python是一个优秀的编程语言,它的优点是简洁、易读、易学、功能强大。Python语言可以用于Web开发、数据科学、人工智能等众多领域。在本文中,我们将介绍如何使用Python编写自定义界面的库。

    2024-04-02
    69
  • Python函数参数的使用方法

    Python函数参数的使用方法位置参数是我们最常见的参数类型。当我们定义函数时,可以通过赋值来定义函数的参数,这就是位置参数。当我们调用函数时,需要按照定义顺序传递参数,即传递给函数的第一个参数会给第一个位置参数,第二个参数会给第二个位置参数,以此类推。

    2024-03-23
    82
  • 故障分析 | MySQL 优化案例 – 字符集转换「建议收藏」

    故障分析 | MySQL 优化案例 – 字符集转换「建议收藏」作者:xuty 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文关键字:SQL 优化、字符集 一、背景 Server version: 5.7…

    2023-03-17
    161
  • Navicat15 for Mysql激活教程「建议收藏」

    Navicat15 for Mysql激活教程「建议收藏」1、下载Navicat Premium Navicat15链接:http://www.navicat.com.cn/download/navicat-premium,选择相应版本,这里选择window

    2023-02-28
    149
  • Python中elif关键字的用法

    Python中elif关键字的用法Python是一种面向对象、解释型语言,它与其他语言不同的地方在于采用了indentation(缩进)代替了语句结束的分号或者大括号等符号。Python中的if/elif/else也是控制流程中比较重要的关键字,能够帮助程序员控制程序的逻辑,在不同的条件下执行不同的代码。

    2024-02-12
    89

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注