列存储 | 青训营笔记

69 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

数据库的基础概念

数据库的类型

  • 关系型数据库:把数据以表的形式进行储存,建立表和表之间的关系,通过表关系来操作不同表之间的数据。

  • 非关系型数据库:NoSQL或非关系型数据库,支持存储和操作非结构化数据和半结构化数据。没有固定的表结构,不存在数据表之间的关系。

  • 单机数据库:在一台计算机上运行的数据库

  • 分布式数据库:由不同站点的两个或多个文件组成。数据库可以存在于多台计算机上。

  • OLTP数据库:高速分析数据库,专门为多个用户执行大量事务而设计

  • OLAP数据库:旨在同时分析多个数据纬度,帮助团队更好地理解其数据库中的复杂关系

OLAP数据库

  • 大量数据的读写
  • 多维分析,复杂的聚合函数
  • 窗口函数,自定义UDF
  • 离线/实时分析

列存储

优点

  • 数据压缩
    • 数据压缩可以使读的数据量更少
    • 相同类型压缩效率更高
    • 排序之后压缩效率更高
    • 可以针对不同类型使用不同的压缩算法
  • 数据选择
    • 可以选择特定的列计算而不是读取所有列
    • 对聚合计算友好
  • 延迟物化
    • 物化:将列数据转换为可以被计算或者输出的行数据或者内存数据的结果的过程。
    • 缓存友好
    • CPU/内存带宽友好
    • 可以利用到执行计划和算子的优化,例如filter
    • 可以保留直接在压缩列做计算的机会
  • 向量化
    • SIMD(直接调用CPU指令集)
    • 数据格式
    • 执行模型

压缩算法

LZ4

输入: abcde_bcdefgh_abcdefghxxxx

输出: abcde_(5,4)fgh_(14,5)fghxxxx

  • (5,4)代表向前5个byte,匹配到的内容长度是4,bcde是一个重复
  • 重复项越多或者越长,压缩率越高

Run-length enconding

输入: WWWWB

输出: 4W1B

  • 压缩重复的数据
  • 可以在压缩数据上直接计算。

Delta enconding

输入: 105, 135, 112

输出: 105(base), 30, -23

  • 将数据存储为连续数据之间的差异,而不是直接存储数据本身
  • 特定算子也能直接在压缩数据上计算

列存储可以很好的解决行存储在数据分析上的一些缺陷,提高数据分析的效率。