数据岗位面试题更新 2026-08-05

Apache Doris 在底层采用了怎样的列式存储结构?这种列式存储和传统的行式存储相比,在数据组织、读写性能和适用场景上有哪些本质区别?

数据技术原理方案权衡Apache Doris

考察说明

考察对 Doris 列式存储设计的理解及其与行存储的差异,评估分布式 OLAP 存储基础。

回答思路

  1. 【回答框架 1】Doris 的列式存储以列族为单位组织数据,每列独立编码和压缩,并配合前缀索引、ZoneMap 索引和 BloomFilter 索引来加速查询。数据按分区分桶存储,每个桶内是列式文件,支持高压缩比。
  2. 【回答框架 2】与行存储的核心区别在于数据物理布局:行存将一行多列连续存放,适合整行读取和频繁更新;列存将同一列连续存放,查询只需读取涉及的列,大幅减少 IO,适合大范围聚合和扫描。
  3. 【回答框架 3】列存在写入时通常需要缓冲批量数据后落盘,随机写入成本高;行存支持高频点更新和插入。Doris 通过追加写和后台合并机制优化写入,但依然更适合批量导入和 OLAP 场景。
  4. 【回答框架 4】列式存储天然利于压缩,同一列数据类型一致,压缩率高;行存储压缩率低。但列存对点查询(如按主键查一行)不如行存高效,需依赖索引辅助。
  5. 【回答框架 5】Doris 针对列存设计了智能索引和向量化执行引擎,查询时只物化必要的列,进一步减少内存和 CPU 开销,这是其高性能查询的关键。
  6. 【关键点 1】列式存储按列独立编码压缩,结合前缀索引和 ZoneMap 减少扫描范围。
  7. 【关键点 2】列存适合 OLAP 的大范围聚合和扫描,行存适合 OLTP 的整行读写和点更新。
  8. 【关键点 3】Doris 列存写入偏批量追加,随机写性能弱于行存,但通过合并机制缓解。
  9. 【关键点 4】高压缩比是列存显著优势,同一列数据类型一致利于压缩。
  10. 【关键点 5】列存点查询需索引辅助,整体不如行存直接。
  11. 【易错点 1】不要将列式存储描述成所有查询都快,点查和频繁更新场景反而不如行存。
  12. 【易错点 2】不要把 Doris 的写入优化等同于支持任意高频随机写,其设计重点是批量导入。
  13. 【易错点 3】注意列存压缩率和查询加速依赖具体数据类型和查询模式,不能一概而论。