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

2023-05-16

大家好,我是大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,备注「进群」。
有关大数据技术的问题在群里一起探讨。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么列式存储会被广泛用在 OLAP 中? 的相关文章

  • 联机事务处理(OLTP) 和 联机分析处理(OLAP)

    OLTP是对数据库联机的日常操作 xff0c 通常是对一条记录的査询和修改 xff0c 要求快速响应用户的请求 xff0c 对数据的安全性 完整性及事物吞吐量要求很高 OLAP是对数据的査询和分析操作 xff0c 通常是对海量历史数据的査询
  • 为什么列式存储会被广泛用在 OLAP 中?

    大家好 xff0c 我是大D 不知是否有小伙伴们疑问 xff0c 为什么列式存储会广泛地应用在 OLAP 领域 xff0c 和行式存储相比 xff0c 它的优势在哪里 xff1f 今天我们一起来对比下这两种存储方式的差别 其实 xff0c
  • ClickHouse副本同步及分布式DDL的原理

    相信了解大数据的小伙伴们都知道 基本上所有的分布式存储系统都有一个共同的特点 将庞大的数据量分成多个小块存储在不同的机器上 通常称为分片 每个分片为了保证它数据不丢失 它们又有各自副本 ClickHouse也不例外 一起来看看ClickHo
  • 【OLAP(联机分析处理)】简单理解

    OnLine Analysis Processing 联机分析处理 功能 支持复杂的分析操作 侧重决策支持 并且提供直观易懂的查询结果 原理 OLAP联机分析首先是把数据预处理成数据立方 Cube 并把有可能的汇总都预先算出来 即预聚合处理
  • Clickhouse表引擎-日志系列

    1 表引擎的介绍 Clickhouse的表引擎类似MySQL的表引擎 表引擎决定了如何存储表的数据 主要包含如下特性 数据的存储方式和位置 写到哪里以及从哪里读取数据 支持哪些查询以及如何支持 并发数据访问 索引的使用 如果存在 是否可以执
  • 最燃黑客情报官薛锋:端起AK伏特加,代表人民把坏人抓

    文 史中 一 情报专家从未凋零真相并不总是像女神一样遥不可及 在二战最为焦灼的时候 盟军迫切地想知道一件事情 德国人究竟有多少坦克 于是他们派出间谍 破译电报 对德国俘虏刑讯逼供 得出的结论是 德国每个月可以生产1000多辆坦克 可是好像哪
  • Doris数据模型

    目录 基本概念 Aggregate 模型 示例1 导入数据聚合 示例2 保留明细数据 示例3 导入数据与已有数据聚合 Unique 模型 读时合并 与聚合模型相同的实现方式 写时合并 Duplicate 模型 聚合模型的局限性 Unique
  • 用于 Python 的 MS Analysis Services OLAP API [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在寻找一种方法来连接到 MS Analysis Services OLAP 多维数据集 运行 MDX 查询并将结果提取到 Python 中 换句话说 这正是 Excel 所做
  • 通过过滤度量值在 MDX 中定义计算成员

    我需要在 MDX 中定义一个计算成员 这是 SAS OLAP 但我很感谢使用不同 OLAP 实现的人员提供的答案 新度量的值应通过应用附加过滤条件根据现有度量计算得出 我想通过一个例子会更清楚 现有衡量标准 总流量 现有维度 方向 入 或
  • 使用VBA选择和取消选择多个切片器项目(OLAP数据)

    我正在编写一个仅选择所需切片器项目的脚本 我尝试使用 SlicerItems Selected True False用于选择和取消选择 但我使用的是 OLAP 数据源 在这种情况下 Selected是只读的 切片器项目的格式为 YYYYWW
  • SQL Server Analysis Services 和 OLAP 开发人员指南 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 这篇文章来自 SqlBatman描述了与我当前客户类似的情况 实际上 这表明许多公司依赖大量报告 而这些报告由于对性能的影响而被转移到夜间处理 我如何开始使用 Analysis Se
  • 强制 VBA 等待 Power Pivot 完成刷新

    我在 VBA 中遇到了一个非常不寻常的错误 我已经为此苦苦挣扎了两天 我有一个代码 可以更新要在 Active x 下拉列表中显示的值 然后使用ListFillRange财产 不幸的是 每次我运行它时都会产生错误 我认为该错误是由于在电源枢
  • 在报告中为 icCube 事件分配值

    我正在使用 icCube 5 0 报告 我想将事件的值分配给 icCube MDX 函数 UserName 返回的值 有点像 eventname UserName 最终 eventname reportParm 将被发送到启动的报告以在过滤
  • 如果 CubeField.Orientation = xlPageField 如何设置 PivotField.HiddenItemsList 属性的值

    任务是自动化 OLAP 数据透视表数据过滤 我需要排除名为 sPivotFieldName 的数据透视字段中的一些项目 下面的代码工作得很好 With Worksheets sWorksheetName PivotTables sPivot
  • 在连接到 SSAS OLAP 多维数据集的 Excel 中按键排序

    我搜索了互联网和 StackOverflow 但没有找到这个问题的答案 我通过 SSAS 创建了一个带有日期维度的 OLAP 多维数据集 维度的属性之一是活动日历月 The NameColumn值的格式如 January 2015 Febr
  • 从关系型 OLTP 数据库到 OLAP 多维数据集的最佳方法是什么?

    我有一个相当标准的 OLTP 标准化数据库 并且我意识到我需要在数据的不同维度上执行一些复杂的查询 平均值 标准差 所以我转向了 SSAS 和 OLAP 多维数据集的创建 然而 要创建多维数据集 我相信我的数据源结构需要采用 星形 或 雪花
  • Java 中的内存 OLAP 引擎 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有内存中 OLAP 切片和切块数据 Java 库 相当于 Microsoft 分析服务 特别想听听
  • Mondrian OLAP 引擎 + Olap4j 的数据呈现

    我正在对一个应用程序进行一些规划 该应用程序使用 Mondrian OLAP 引擎和 Olap4j 并且应该向用户呈现 显示数据 我了解所有后端内容 但我不确定应该如何在视图层中显示数据 例如 olap4j 有一个格式化程序 可以将 SEL
  • 基于不同 ID 的 SSAS 聚合

    我希望将不同 ID 值的默认聚合从 SUM 更改为 SUM 这是当前的行为 ID Amount 1 10 1 10 2 20 3 30 3 30 Sum Total 90 默认情况下 我会收到 90 美元 我希望对不同的 id 进行求和并得
  • SQL Express 上的 OLAP

    我想知道是否有任何桌面 OLAP 解决方案可以使用 SQL Express 因此不需要 Analysis Services 我的任务是找到一种方法让我们的客户能够制作 临时 报告 但其中绝大多数都是在 Sql Express 上 在以前的工

随机推荐

  • 【无标题】

    CMake Error at xxaipkg CMakeLists txt 50 add message files Unknown CMake command add message files Configuring incomplet
  • npm安装淘宝镜像报错

    npm install g cnpm registry 61 https registry npm taobao org 执行命令报错 无法安装cnpm 解决方案 xff1a 用管理员方式打开命令行 xff0c 就可以安装成功了
  • Leetcode——贪心算法(c++和java实现)

    本来有一段时间没有刷题了 xff0c 但是突然发现了这本书LeetCode 101 A LeetCode Grinding Guide C 43 43 Version xff0c 感觉真不错 xff0c 思路简单清晰 xff0c 没有过多的
  • 树莓派3B+安装c++版本opencv3.4.1,配置开发环境以及注意事项

    树莓派3B 43 安装c 43 43 版本opencv3 4 1 xff0c 配置开发环境以及注意事项 树莓派3B 43 ubuntu mate系统的安装 树莓派 xff0c Raspberry Pi xff0c 是一个只有信用卡大小的微型
  • 由frankmocap得到的.pkl文件转为.bvh或者.fbx

    需求 由Frankmocap所得到的 pkl文件转为blender里的 bvh或者Maya里的 fbx Frankmocap github项目地址 2D转3D转 bvh可以看VideoTo3dPoseAndBvh xff0c bvh转3D相
  • centos 安装docker

    查看系统内核版本 docker需要内核版本在3 8以上 centos7 版本是3 10 安装支持aufs CentOS7 默认不支持aufs文件系统 需要自己安装支持aufs的内核 进入repo目录 cd etc yum repo d 下载
  • echarts框架下大数据量展示的解决方案

    echarts 43 大数据量 这是个无解的问题 xff01 大数据量 xff0c 什么样的数据才算大呢 xff1f 在echart 4 5 0版本中 xff0c 画折线图 xff0c 数据线一共1001000条 xff0c 每条数据500
  • Open vSwitch介绍

    Open vSwitch介绍 1 vSwitch功能2 OvS架构3 OvS报文处理3 1 传统OvS方式3 2 OvS 43 DPDK处理方式 4 OvS补充说明4 1 基本概念4 2 匹配项与规则4 2 1 匹配项4 2 2 动作 本节
  • Python写ROS话题

    Python写ROS话题 导入ROS模块发送话题接收话题第一种方式 xff1a rospy Subscriber第二种方式 xff1a rospy wait for message完整程序 多线程处理同时接受多个话题 导入ROS模块 用py
  • Python写ROS程序常用数据结构std_msgs、geometry_msgs、sensor_msgs

    Python写ROS程序常用数据结构 std msgsFloat64MultiArray geometry msgsVector3TwistWrenchPointQuaternionPosePose2D Stamped sensor msg
  • ROS中gazebo配置教程详解

    ROS中gazebo配置教程详解 机器人模型文件获取原始URDF模型文件采用xacro格式改写文件增加gazebo插件描述增加传动transmission最后将上面三个文件合成一个文件 环境XX world文件配置文件 yaml启动文件la
  • gazebo添加末端六维力传感器

    gazebo添加末端六维力传感器 建立六维力矩传感器模型将传感器拼接到机器人模型配置传感器gazebo参数 常用的机器人只支持位置控制 xff0c 但实际运用中 xff0c 却对末端力控制有迫切的需求 xff0c 其中一种常用的方法是基于位
  • gazebo .world文件中导入dae模型的问题

    gazebo world文件中导入dae模型的问题 gazebo环境提供了很多可以直接导入的模型 xff0c 如果想往环境中导入自己的静态模型 xff0c 需将自己的模型转化为dae格式 xff0c 并编写相应的 world文件 准备好da
  • OpenCV单目视觉定位实现方法

    OpenCV单目视觉定位 xff08 测量 xff09 系统 The System of Vision Location with Signal Camera Abstract This passage mainly describes h
  • CMakeLists.txt 语法介绍与实例演练

    一 Cmake 简介 cmake 是一个跨平台 开源的构建系统 它是一个集软件构建 测试 打包于一身的软件 它使用与平台和编译器独立的配置文件来对软件编译过程进行控制 二 常用命令 1 指定 cmake 的最小版本 span class t
  • 卡尔曼滤波原理介绍及算法实现

    卡尔曼滤波原理介绍及算法实现 基础概念及理论状态方程和观测方程建立卡尔曼滤波评估方程卡尔曼滤波分类 六维力传感器滤波案例建立状态方程和观测方程求激励和误差协方差计算卡尔曼增益卡尔曼滤波表达式 算法代码实现 本文将参照教科书的介绍 xff0c
  • Java:IDEA中的常用快捷键

    快捷键一 xff1a psvm 用来快速写一个main函数 例如 xff1a 输入psvm后按回车 xff0c 就会直接生成 public static void main String args 这样一个语句 快捷键二 xff1a sou
  • sudo rosdep init 找不到命令解决办法

    sudo rosdep init 找不到命令解决办法 先看看到底ros安装成功没有 span class token function whereis span rosdep 果不其然 解决办法也很简单 span class token f
  • ubuntu18 分辨率只有800*600/640x480,怎么转1920x1080

    问题描述 我已经抢救回来了 xff0c 然后800600的话会在resolution里面只显示800600 xff0c 完全修改不了的 无效尝试 个人尝试过重装英伟达驱动 xff0c 但都没有作用 还有一次 xff0c 按照百度经验的方法操
  • 为什么列式存储会被广泛用在 OLAP 中?

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