GBase 8a
其他
文章
精选

数据块(DC)作为基本I/O单位,每个DC包含65536行数据且尾块不压缩。这种设计对数据加载、查询和压缩效率有何影响?

发表于2026-03-18 10:20:4317次浏览3个评论

数据块(DC)作为基本I/O单位,每个DC包含65536行数据且尾块不压缩,这种设计是GBase 8a列式存储引擎的核心,对数据加载、查询和压缩效率产生了深刻且积极的影响,但也引入了特定的权衡。

一、对数据加载效率的影响

积极影响:

  1. 批量写入,性能极高
    • 数据以DC为单位(65536行) 进行组织、压缩和写入磁盘。这实现了真正的批量I/O,将大量零散的行插入合并为一次大的顺序写操作,极大减少了磁盘I/O次数和寻道时间

       

    • “数据以DC(数据单元)为单位进行组织, 存成DC文件”。

       

  2. 尾部追加,不影响存量
    • 新的数据总是从DC尾块开始追加。尾块是不压缩、不封装的,这意味着新数据可以快速、直接地写入,无需解压和重组整个大DC块。

       

    • “DC尾块不封装、不压缩。”;“INSERT原理:从DC尾块新增数据,不影响已入库的数据。”
  3. 线性扩展的加载性能
    • 由于每个DC处理固定行数,集群的加载吞吐能力可以随着节点和数据分片的增加而线性提升。文档中提到加载速度可达 30T+/小时

潜在权衡:

  • “最后一点”延迟:当数据量不足以填满一个DC(不足65536行)时,这些数据会以未压缩的尾块形式存在,无法享受批量压缩和高效I/O的好处,直到积累够一个满DC。

二、对查询效率的影响

积极影响:

  1. 精准I/O,大幅减少读取量(列式存储核心优势)
    • DC是列级别的I/O单位。查询时,只有涉及到的列才会被读取,无关列完全不产生I/O。

       

    • “DC是基本I/O单位,只有查询所涉及到的列才产生I/O。”

       

  2. 智能索引过滤,跳过无关数据块
    • 每个DC都会自动生成粗粒度智能索引(记录该DC内本列的最大值、最小值、空值等)。

       

    • 查询时,优化器可以先检查智能索引。如果查询条件(如 WHERE col > 100)与该DC的数值范围(如 max=50)完全不匹配,整个DC(65536行)都可以被跳过,无需读取和解压。
    • “有效性:大大缩小查询和数据物化的范围,迅速定位目标数据集。”

       

  3. 向量化计算友好
    • 一次性读入一个DC(65536行)的同一列数据,内存中是一段连续、同类型的数据块。这非常适合于现代CPU的SIMD指令集进行向量化计算,大幅提升聚合、过滤等操作的性能。

潜在权衡:

  • 点查询可能“放大”I/O:如果只查询一行数据,但这一行所在的列DC有65536行,理论上也需要读入整个DC(尽管可能通过缓存优化)。但相比行存需要读入整行所有列,列存的I/O放大代价通常小得多。

     

三、对压缩效率的影响

积极影响:

  1. 超高压缩比
    • 由于一个DC内存储的是同一列的65536个值,这些值数据类型相同、数据分布相似(尤其是排序列),冗余度极高。
    • 列式压缩算法可以针对这种同质数据实现深度压缩,压缩比可达1:20,远高于行存储。

       

    • 文档依据:“基于一列内同类型数据,实现高压缩比存储”;“压缩比可达到1:20,远远高于行存储”。

       

  2. 压缩态计算,减少I/O
    • 数据在磁盘上以压缩态存储。在某些查询场景下(如聚合),可以直接在压缩数据上进行部分计算,或者只需解压少量相关数据,大幅降低磁盘I/O和内存占用

       

    • “压缩态数据使得数据处理过程中,大幅降低磁盘IO”。

       

  3. 灵活的压缩策略
    • 可以按库、表、列三级设置不同的压缩算法(0,1,3,5等),在压缩比和性能间取得平衡。

潜在权衡(由“尾块不压缩”设计引起):

  • 空间与性能的临时牺牲:尾块中的数据是未压缩的,会占用更多磁盘空间,且读取时没有压缩带来的I/O节省。这是为了换取极致的写入性能而做的妥协。一旦尾块积累成满DC,就会被压缩封装,空间和读取效率随之提升。

四、总结:DC设计的核心思想

GBase 8a的DC设计体现了 “以空间换时间”“批量处理” 的核心思想,专为海量数据分析(OLAP) 场景优化:

方面设计选择带来的优势付出的代价
加载

批量写入(65536行/DC),尾块不压缩

 

高速批量加载,线性扩展。少量数据时效率未达最优。
查询列式I/O,智能索引过滤精准读取向量化计算跳过无关数据极少数点查询有I/O放大。
压缩

同列数据批量压缩,尾块不压缩

 

超高压缩比压缩态计算,节省存储与I/O。尾块数据暂时无压缩收益。

最终效果:这种设计使得GBase 8a在数据仓库、商业智能、决策支持系统读多写少、批量扫描、聚合分析的场景下,能够实现极致的查询性能和极高的存储经济性。它牺牲了少量场景下的最优表现,换来了在目标场景下整体效能的巨大提升。

 

 

评论

登录后才可以发表评论
用户头像
GBase用户28017发表于 1个月前
优秀
GBase用户47954发表于 1个月前
感谢作者的精彩分享!
流泪猫猫头发表于 3小时前
学习了。