博客
关于我
4张图告诉你:为什么大数据场景中偏爱列式存储?(建议收藏)
阅读量:545 次
发布时间:2019-03-09

本文共 1098 字,大约阅读时间需要 3 分钟。

列式存储 vs 行式存储:比较与优化

行式存储和列式存储是数据库组织数据的两种主要方式,本文将从存储方式、查询性能以及数据压缩等方面,深入探讨两者的优缺点。

存储方式对比

行式存储以行为基本单位,将一张表的所有数据按行连续存储。这意味着每一行包含多个字段,通常采用行-major order的方式组织数据。例如,以下表格:

id name age
1 Alice 30
2 Bob 25

在行式存储中,其实存在着多个行的数据,每一行都包含多个字段。而列式存储则有所不同,它以字段(列)为基本单位,将表中所有数据按照列连续存储。例如:

id name age
1 Alice 30
2 Bob 25

在列式存储中,所有id数据集中在id列,每个列的数据点都被独立存储,其特点是数据的高度局部性。

查询性能分析

列式存储通过将数据按列存储,能够在查询时显著优化性能。这主要体现在以下几个方面:

  • 字段聚集:列式存储可以将所有相同字段的数据集中存放,例如所有的id数据存放在id列,name字段存放在name列。这样,在进行筛选、排序或关联操作时,可以快速定位目标数据。

  • 缓存利用:很多现代数据库系统支持外排序列存储(SortKey),这允许在查询时将需要排序的字段预先存储在索引或缓存中,从而减少IO操作的开销。

  • 数据压缩:借助数据压缩技术,可以在存储层面上进一步降低数据量。通过将字段映射到唯一的数字代码,数据量可以大幅减少。例如,用字典压缩技术,可以将字符串字段替换为唯一的数字代码,使得数据存储需求大幅降低。

  • 数据压缩示例

    假设有一个字段存储大量重复的字符串值,通常情况下,这些字符串需要大量存储空间。通过字典压缩,每个字符串都被映射到唯一的数字代码,这种映射过程类似于Normalization(规范化)过程的一种反向操作。

    字符串值 字典映射
    Alice 1
    Bob 2
    Charlie 3

    通过这种方式,每个字段的映射都能减少存储需求,同时又保持了数据的可解析性。

    查询执行的优化过程

    列式存储在查询执行时,以下步骤展示了其优化过程:

  • 字段映射:首先,列式存储将字段的值映射到预先建立的字典表中,获取唯一的键值编码(如ID)。这一步骤只需进行一次字符串比较。

  • 列匹配:用编码后的数字值去匹配对应的列表中的位置,生成1(表示匹配成功)。

  • 位操作:对不同列的匹配结果进行位运算,生成符合所有条件的记录下标。

  • 结果组装:通过下标快速定位出满足查询条件的完整数据记录,并组装最终结果集返回。

  • 通过这种列式存储加数据压缩的方式,可以显著提升查询执行性能,尤其在需要频繁查询或关联的场景中表现尤为突出。

    转载地址:http://lariz.baihongyu.com/

    你可能感兴趣的文章
    修改ng-zorro中table对齐及宽度等细节
    查看>>
    输出对象的值——踩坑
    查看>>
    angular2项目里使用排他思想
    查看>>
    折线图上放面积并隐藏XY轴的线
    查看>>
    zabbix之自动发现
    查看>>
    Experience of tecent interview
    查看>>
    python实验--太理二
    查看>>
    failed to push some refs to git
    查看>>
    vue基础学习01
    查看>>
    控制流程获取1-100以内的质数质数
    查看>>
    在苹果Mac上如何更改AirDrop名称?
    查看>>
    1110 Complete Binary Tree (25 point(s))
    查看>>
    310【毕设课设】微机原理-基于8086CPU校园标语牌系统仿真设计
    查看>>
    541【毕设课设】基于单片机电阻电感电容RLC测量仪系统
    查看>>
    568【毕设课设】基于单片机多路温度采集显示报警控制系统设计
    查看>>
    基于8086交通灯系统仿真设计(微机原理设计资料)
    查看>>
    TCP/IP五层模型之数据链路层
    查看>>
    解读域名管理之:域名注册机构介绍
    查看>>
    找中位数
    查看>>
    这些运维发展方向及系统运维技能都不了解,怎么能吃透Linux??
    查看>>