Apache Doris 与 Apache Kylin 作为主流 OLAP 引擎均针对多维数据聚合结果的高效存储做了深度优化但二者基于自身架构定位Doris 实时交互式、Kylin 预计算加速采用了完全不同的存储逻辑。核心差异在于“实时聚合轻量化存储”与“预计算 Cube高并发适配存储”的路径区分以下分别拆解其底层原理。一、Apache Doris存储原理Apache Doris 针对多维聚合结果的存储核心围绕“聚合模型预聚合列式存储优化分层压缩轻量化架构”展开兼顾实时性与存储效率无需依赖外部生态实现聚合结果的高效读写与低冗余存储其核心原理可分为4个关键层面。一核心前提聚合模型的预聚合机制从源头减少数据量Doris 提供专门的聚合模型Aggregate Key Model这是其聚合结果高效存储的基础核心逻辑是“写入即聚合”从数据导入阶段就减少冗余数据避免无效存储开销。具体而言Doris 聚合模型会预先定义聚合键维度字段和度量字段聚合指标如求和、计数、平均值等当数据导入时会自动对相同聚合键的记录进行初步聚合将同一维度组合的多条明细数据合并为一条聚合记录仅保留聚合后的度量结果而非存储全部明细数据。例如电商场景中“地区、商品品类、日期”作为聚合键“销售额、订单数”作为度量导入数据时相同地区、品类、日期的多条销售记录会被即时聚合仅存储一条聚合结果从源头减少了存储数据量同时为后续查询省去实时聚合的开销。此外聚合模型支持多版本管理每批次导入的数据会形成一个独立版本后台通过 Compaction 机制定期合并多版本文件进一步消除冗余优化存储结构与查询效率。二存储架构列式存储分区分桶适配多维聚合查询Doris 采用 MPP 架构聚合结果存储依赖 FE前端节点与 BE后端节点的协同核心存储载体为 BE 节点的列式存储引擎结合分区分桶策略实现聚合结果的高效组织与快速检索。1.列式存储优化聚合结果按列存储而非传统的行存储——多维聚合的维度字段和度量字段分别归为不同列组存储时按列进行编码、压缩和读取。这种方式的优势的在于多维查询时只需扫描与查询维度、度量相关的列无需扫描整个行数据大幅减少 IO 开销同时列式存储更易实现同列数据的相似性压缩尤其是聚合后的度量字段如销售额、订单数数据分布相对集中压缩比更高进一步降低存储成本。此外Doris 对列数据进行了精细的编码优化针对维度列如地区、日期采用字典编码、位图编码针对度量列如数值型聚合结果采用 RLE 编码、Delta 编码通过编码进一步减少数据存储空间同时提升查询时的解码效率。2.分区分桶策略聚合结果会按用户定义的规则进行分区如按日期分区和分桶如按聚合键哈希分桶实现数据的分层分片存储。分区层面可将不同时间范围、不同业务维度的聚合结果拆分到不同分区查询时可通过分区过滤快速定位目标数据避免全表扫描分桶层面将同一分区内的聚合结果按聚合键哈希分配到不同 BE 节点实现数据的负载均衡同时支持并行查询提升多维聚合查询的响应速度。例如按日期分区存储电商每日的聚合销售额查询某一周的聚合数据时仅需扫描对应7个分区无需遍历全部数据大幅提升查询效率。三压缩策略分层压缩自适应优化平衡存储与性能Doris 针对聚合结果的不同数据类型维度列、度量列采用分层压缩策略既保证高压缩比以节省存储又避免过度压缩导致查询解码开销过大实现存储效率与查询性能的平衡。具体而言Doris 将聚合结果的存储分为内存层、磁盘层采用不同的压缩方案内存层用于缓存热点聚合结果采用轻量级压缩算法如 LZ4兼顾压缩速度与解码效率确保热点多维查询的快速响应磁盘层用于持久化存储所有聚合结果采用高压缩比算法如 ZSTD、Snappy针对不同列类型自适应选择压缩算法——维度列字符串、枚举型侧重高压缩比采用 ZSTD 算法可将重复度高的维度数据压缩至原大小的10%-30%度量列数值型侧重压缩与解码速度的平衡采用 Snappy 或 LZ4 算法确保聚合查询时的解码效率。此外Doris 支持压缩级别自适应调整根据聚合结果的数据量、查询频率动态调整压缩级别对于查询频繁的热点聚合数据采用低级别压缩优先保证查询性能对于查询频率低的冷数据采用高级别压缩最大化节省存储空间。四轻量化架构无外部依赖减少存储冗余Doris 采用独立的 MPP 架构无需依赖 Hadoop、HBase 等外部组件聚合结果直接存储在 BE 节点的本地磁盘或分布式存储避免了跨组件数据传输与存储冗余。与 Kylin 依赖 Hadoop 生态的存储模式不同Doris 的聚合结果存储无需额外维护 HDFS、HBase 等组件的存储开销也无需进行数据在多组件间的复制与同步从架构层面减少了存储冗余和运维成本。同时Doris 采用“计算与存储一体化”设计BE 节点既负责聚合结果的存储也负责查询时的聚合计算避免了数据在存储节点与计算节点之间的频繁传输进一步提升多维聚合查询的效率同时减少了因数据传输带来的额外存储开销。二、Apache Kylin存储原理Apache Kylin 针对多维聚合结果的存储核心围绕“预计算 CubeCube 优化HBase 分布式存储”展开核心目标是适配超高并发的固定维度查询通过预计算将多维聚合结果提前存储牺牲部分存储灵活性换取极致的查询响应速度其核心原理可分为4个关键层面。一核心前提预计算 Cube 与 Cuboid 裁剪控制存储规模Kylin 的核心是“预计算 Cube”即提前计算出所有可能的维度组合Cuboid的聚合结果将多维聚合的计算压力转移到数据导入阶段查询时仅需读取预计算好的聚合结果无需实时计算。但多维维度组合会产生“维度爆炸”问题N 个维度可产生 2^N 个 Cuboid若不加以优化会导致存储量急剧膨胀因此 Kylin 通过 Cuboid 裁剪技术从源头控制存储规模实现聚合结果的高效存储。具体而言Kylin 提供多种 Cuboid 裁剪策略过滤无效或非必要的维度组合一是通过“维度层级裁剪”根据业务场景定义维度的层级关系如“省份→城市→区县”仅保留有业务意义的维度组合过滤无意义的跨层级组合二是通过“聚合组裁剪”将维度划分为多个聚合组每个聚合组内的维度可自由组合聚合组之间不进行跨组组合大幅减少 Cuboid 数量三是通过“必要维度/可选维度设置”指定核心维度必须包含在 Cuboid 中和可选维度可根据需求选择是否包含进一步筛选有用的 Cuboid。例如若有“日期、地区、商品品类、渠道”4个维度通过聚合组裁剪将“日期、地区”划分为一个聚合组“商品品类、渠道”划分为另一个聚合组可将 Cuboid 数量从 16 个2^4减少至 9 个333有效控制存储膨胀同时不影响核心业务查询。二存储载体HBase 分布式存储适配高并发查询Kylin 的聚合结果Cube最终存储在 HBase 中依托 HBase 的分布式架构、高并发读写能力、rowkey 索引优化实现多维聚合结果的高效存储与快速检索这是 Kylin 适配万级 QPS 高并发查询的核心支撑。核心设计逻辑如下一是将每个 Cuboid 的聚合结果映射为 HBase 的一行数据Cuboid 的维度组合作为 HBase 的 rowkey通过编码优化确保维度组合的唯一性和有序性聚合后的度量结果作为 HBase 的列簇数据二是 HBase 的 rowkey 支持有序存储和前缀索引多维查询时可通过 rowkey 前缀匹配快速定位目标 Cuboid 的聚合结果无需全表扫描大幅提升查询效率三是 HBase 采用分布式分片存储将不同 Cuboid 的聚合结果分布到不同 RegionServer实现负载均衡支持高并发查询请求的并行处理。此外Kylin 对 HBase 的存储结构进行了优化将相同维度类型的 Cuboid 分配到相同的 Region减少跨 Region 的查询开销同时针对度量字段采用列簇压缩存储结合 HBase 的压缩机制如 Snappy、LZO进一步降低存储成本。三Cube 存储优化编码与分区提升存储与查询效率除了 Cuboid 裁剪和 HBase 存储适配Kylin 还通过维度编码、Cube 分区等优化手段进一步提升聚合结果的存储效率和查询性能。1.维度编码优化Kylin 对 Cuboid 的维度字段进行统一编码将字符串、日期等维度值转换为整数编码如字典编码、整数映射减少 rowkey 的长度降低 HBase 的存储开销同时提升 rowkey 的排序和检索效率。例如将“北京、上海、广州”等地区维度值映射为 1、2、3 等整数可将 rowkey 长度缩短 50% 以上大幅提升存储效率和查询时的 rowkey 匹配速度。2.Cube 分区策略Kylin 支持按时间维度对 Cube 进行分区如按天、按月分区将不同时间范围的聚合结果存储在不同的 HBase 表或 Region 中查询时可通过时间分区过滤快速定位目标数据避免扫描全部 Cube 数据。同时分区支持增量更新当新增数据时仅需重新计算对应分区的 Cuboid无需重建整个 Cube减少计算和存储开销。四缓存与复用多级缓存提升热点查询效率Kylin 针对高频访问的聚合结果采用多级缓存策略减少对 HBase 磁盘的访问进一步提升查询响应速度同时间接降低存储的 IO 压力。具体而言Kylin 提供三级缓存一是内存缓存Query Cache将最近查询过的聚合结果缓存到 Kylin 服务端的内存中相同查询可直接从内存返回响应时间达到毫秒级二是 HBase 块缓存Block Cache将高频访问的 Cuboid 数据块缓存到 HBase RegionServer 的内存中减少磁盘 IO 开销三是本地磁盘缓存将热点 Cube 的聚合结果缓存到 Kylin 客户端的本地磁盘适合离线查询场景。此外Kylin 支持 Cube 复用当多个业务查询的维度组合一致时可复用同一个 Cuboid 的聚合结果无需重复存储和计算进一步减少存储冗余提升资源利用率。三、两者核心差异总结Apache Doris 与 Apache Kylin 聚合结果的高效存储原理本质是由其架构定位决定的核心差异可概括为“实时灵活型存储”与“预计算高并发型存储”的区别具体对比如下1.存储核心逻辑Doris 是“写入即聚合实时存储”无需预计算所有维度组合存储的是动态聚合后的结果兼顾灵活性与存储效率Kylin 是“预计算 Cube持久化存储”提前计算所有必要维度组合存储的是固定 Cuboid 的聚合结果牺牲灵活性换取高并发查询性能。2.存储载体与架构Doris 独立部署聚合结果存储在本地磁盘/分布式存储无外部依赖架构轻量化Kylin 依赖 Hadoop 生态聚合结果存储在 HBase依托分布式架构实现高并发支撑。3.存储优化重点Doris 侧重列式存储、分层压缩、分区分桶优化目标是平衡存储成本、实时性与查询灵活性Kylin 侧重 Cuboid 裁剪、维度编码、HBase 适配优化目标是控制存储膨胀、提升高并发查询效率。4.存储冗余与开销Doris 存储冗余低无维度爆炸问题运维成本低Kylin 存在一定存储冗余Cuboid 组合依赖 Hadoop 生态运维成本较高。