【无标题】

定义

这是一个由两个核心概念组成的术语,我们将它拆解并组合起来理解:

  1. MPP: 大规模并行处理。这是一种计算架构。
  2. 分析型数据库: 专为复杂查询和海量数据分析而设计的数据库,也称为OLAP数据库。

结合起来的定义是:MPP分析型数据库是一种采用大规模并行处理架构,专门为高效处理海量数据的复杂分析查询而设计的数据库系统。

它的核心设计思想是 “分而治之”。

核心工作原理(“分而治之”)

想象一下,你要在图书馆里统计所有藏书的总页数。传统方法(如单机数据库)是你一个人(一个CPU)一本一本地数。而MPP数据库的做法是:

  1. 数据分片: 将图书馆的所有书架平均分给100个工作人员。
  2. 并行计算: 这100个工作人员同时开始数各自负责书架的总页数。
  3. 结果汇总: 每个人把自己数的结果报上来,最后做一个简单的加法,得到最终总数。

在这个比喻中:
• 每个工作人员 就是MPP集群中的一个节点(通常是一台独立的服务器,包含自己的CPU、内存和磁盘)。

• “同时计数” 就是并行处理。

• “汇总结果” 由协调节点完成。

关键特征

  • 无共享架构: 每个节点都有自己的CPU、内存和存储,节点之间通过网络连接,不共享硬件资源。这避免了资源争用,易于横向扩展。

  • 横向扩展: 当数据量或计算需求增加时,你不需要更换更强大的单台服务器(纵向扩展,昂贵且有上限),而是通过增加更多廉价的普通服务器节点来提升整体性能(横向扩展)。

  • 列式存储: 绝大多数MPP分析型数据库采用列式存储,而非传统的行式存储。

    行式存储: 把一行的所有数据(如用户ID、姓名、年龄、地址)连续存在一起。适合频繁的增删改操作。
    列式存储: 把每一列的数据(所有用户的ID、所有用户的姓名)分别存储在一起。对于分析查询极度友好,因为分析通常只涉及少数几列(如“计算某个地区的平均销售额”),数据库可以只读取“地区”和“销售额”这两列,极大地减少了I/O开销,同时列数据更容易压缩。
    
  1. 高压缩比: 列式存储中,同一列的数据类型相同,重复值多,因此压缩效率非常高,有时能达到5-10倍甚至更高的压缩比,节省大量存储空间和I/O带宽。
  2. 擅长复杂查询: 专门优化了多表关联、分组聚合、窗口函数等复杂分析操作,能够快速在TB/PB级数据上生成报表和洞察。

列式存储之所以能实现远超行式存储的高压缩比,其奥秘在于其数据组织的物理结构完美契合了数据本身的统计特性和分析型查询的访问模式。

我们可以从几个关键点来理解:

  1. 结构基石:同类数据相邻存储

这是所有优势的根源。
• 行式存储:存储顺序是 行1_列A, 行1_列B, 行1_列C, 行2_列A, 行2_列B, 行2_列C…。不同数据类型的值紧挨在一起。

• 列式存储:存储顺序是 行1_列A, 行2_列A, 行3_列A…行N_列A, 行1_列B, 行2_列B…。同一列的所有值被连续存储在一起。

这个简单的结构改变,带来了压缩的黄金机会:因为同一列的数据具有极高的同质性。

  1. 高压缩比的核心原理

基于上述结构,列式存储可以利用以下特性进行极致压缩:

a) 数据类型一致,编码效率高
一列中的所有数据都是同一种数据类型(例如,都是INT, 都是VARCHAR, 都是DATE)。数据库可以为该列选择最合适、最紧凑的编码和压缩算法,而无需在行内存中为不同类型的数据做妥协。
• 例如:一个“年龄”列,值在0-150之间,用1个字节的TINYINT存储就足够了,无需使用4字节的INT。

b) 值重复度极高,可使用字典编码
这是压缩比最高的技术之一。在现实数据中,很多列的值域很小,大量重复。
• 例如:国家、省份、性别、产品类别、状态码等。

• 字典编码:

1.  构建一个字典:{“北京”: 1, “上海”: 2, “广州”: 3, “深圳”: 4}
2.  将原始数据列 [“北京”, “上海”, “北京”, “深圳”, “上海”, “北京”...] 转换为数字序列 [1, 2, 1, 4, 2, 1...]。
3.  存储时,只存储紧凑的数字序列和一个小小的字典文件。原本需要大量字节的字符串,被压缩成了几个比特位的整数,压缩比可能达到几十倍甚至上百倍。

c) 数据局部性强,适合高级压缩算法
同一列的数据在数值上通常有较好的局部性(例如,时间戳递增、指标值变化平缓),这使得行程编码、增量编码、位图编码等算法非常有效。
• 增量编码/帧偏移:对于主键、时间戳这类递增或变化缓慢的序列,不存储原始值,而是存储与前一个值的差值。差值通常很小,可以用很少的比特位表示。

• 行程编码:如果一列中连续出现相同的值,例如状态列 [“成功”,“成功”,“成功”,“失败”,“失败”…],可以压缩为 (“成功”, 3), (“失败”, 2)。这在经过排序的数据上效果爆炸。

d) 利于数据排序,最大化压缩效果
在将数据加载到列式存储之前,可以先按一个或多个关键列进行排序。排序后,不仅排序键本身会有大量连续重复值,其他列也会因为与排序键的关联而出现局部聚集,从而大幅提升RLE、字典编码等算法的效率。

  1. 对比行式存储为何压缩困难

在行式存储中,一行内包含了各种类型的数据。数据库只能以一个数据块(通常包含多行)为单位,使用通用压缩算法(如LZ4, Snappy, Zlib)。
• 劣势1:通用压缩算法需要寻找字节层面的重复模式。而行数据中交替出现的不同类型数据(如一个INT的ID,一个VARCHAR的姓名,一个FLOAT的金额)破坏了这种字节模式的连续性,降低了压缩算法的效率。

• 劣势2:无法使用列特有的、基于语义的高效编码(如字典编码、增量编码)。

一个生动的比喻

想象你要压缩两本书的信息:
• 行式存储: 按顺序抄写:[页码1的所有字], [页码2的所有字], [页码3的所有字]… 然后整体压缩。书中文字风格多变,压缩效率一般。

• 列式存储:

◦   把所有页码的数字单独抄在一张纸A上(全是数字,容易压缩)。

◦   把所有章节标题单独抄在纸B上(大量重复,可用字典)。

◦   把所有正文单独抄在纸C上(文字连续,可用高级文本压缩)。

◦   把所有图片引用单独抄在纸D上(全是编号,极易压缩)。

最后,分别用最适合每张纸内容特性的方法进行压缩,总压缩比远高于第一种方法。

带来的额外好处

高压缩比不仅仅是为了节省硬盘空间,它直接带来了性能的飞跃:

  1. 减少I/O:从磁盘读到内存的数据量更小,解决了分析查询最大的瓶颈——I/O吞吐。
  2. 提高缓存效率:同样的内存容量,可以缓存更多倍的压缩后数据,缓存命中率大增。
  3. 降低网络开销:在MPP分布式架构中,节点间传输压缩数据,网络压力更小。

总结

MPP分析型数据库是现代数据栈的核心组件,是企业数据仓库、数据分析平台和商业智能系统的基石。 当你需要快速地从企业多年积累的、TB/PB级的历史数据中获取洞察、生成报表或进行探索性分析时,它就是最合适的工具。其“分而治之”的并行架构和列式存储设计,使其在处理大数据分析工作负载方面具有无可比拟的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值