OLAP 面试专题
概述
OLAP 面试覆盖:列式存储为什么快、物化视图怎么设计、预聚合 vs 实时计算、分区分桶策略、各引擎选型。本文按原理、优化、架构、选型四类整理高频问答。
一、列式存储
Q1:列式存储为什么查询快?
1. 只读所需列(省 IO)
2. 同列相似数据 → 高压缩
3. 连续列数据 → 向量化 SIMD
4. 聚合/过滤按列高效Q2:列式 vs 行式?
| 对比 | 行式 | 列式 |
|---|---|---|
| 读写 | 整行 | 整列 |
| 压缩 | 低 | 高 |
| 适用 | OLTP | OLAP |
| 聚合 | 慢 | 快 |
Q3:列式存储的代价?
写入重排/列组装开销
不适合高频点更新
适合批量写 + 分析读二、分区分桶
Q4:分区 vs 分桶区别?
| 对比 | 分区 | 分桶 |
|---|---|---|
| 逻辑 | 时间等维度 | 物理分布 |
| 作用 | 裁剪/管理 | 并行/本地性 |
| 粒度 | 粗 | 细 |
分区裁剪减少扫描
分桶提升并行与 Join 本地性Q5:分桶键怎么选?
1. 高基数(分布均匀)
2. 高频过滤/Join 列
3. 避免倾斜(热门值)Q6:桶数怎么定?
桶数 = 数据量 / 单桶目标
不宜过小(并行不足)
不宜过大(小文件多)三、预聚合 vs 实时计算
Q7:预聚合(物化/ Rollup)原理?
提前计算常用聚合:
查询命中 → 直接返回
空间换时间| 预聚合 | 引擎 |
|---|---|
| 物化视图 | Doris/StarRocks/CH |
| Rollup | Doris |
| Cube | Kylin |
Q8:预聚合 vs 实时计算对比?
| 对比 | 预聚合 | 实时计算 |
|---|---|---|
| 延迟 | 构建延迟 | 实时 |
| 查询 | 快 | 计算耗时 |
| 灵活 | 固定维度 | 任意 |
| 场景 | 报表 | Ad-hoc |
组合:
固定指标预聚合
动态查询实时算Q9:什么时候用预聚合?
1. 查询模式固定
2. 数据量大
3. 延迟敏感(报表/大屏)
4. 重复计算多四、物化视图设计
Q10:物化视图设计要点?
| 要点 | 说明 |
|---|---|
| 维度 | 常用查询粒度 |
| 度量 | 常用指标 |
| 刷新 | 同步/异步 |
| 命中 | 与查询对齐 |
设计原则:
面向高频查询
避免过度物化
监控命中率Q11:物化视图命中不了怎么办?
1. 查询维度不在物化范围
2. 粒度不匹配
3. 查询复杂(函数等)
→ 调整物化或查询五、各引擎原理
Q12:ClickHouse 为什么快?
列式 + 稀疏索引 + 分区裁剪 + 向量化 + 并行
以单表聚合见长Q13:Doris/StarRocks 特点?
MPP + CBO + 强 Join + 高并发
多表关联强Q14:Kylin 原理?
Cube 预计算(2^n Cuboid)
查询直接查预聚合
构建延迟、固定维度Q15:Druid 特点?
时序 + 实时摄入 + Segment
适合监控/事件流六、Join 优化
Q16:大表 Join 怎么优化?
| 手段 | 说明 |
|---|---|
| Colocate | 同桶本地 |
| Broadcast | 小表广播 |
| 预聚合 | 减少数据 |
| Runtime Filter | 提前过滤 |
| 倾斜处理 | 加盐/拆分 |
Q17:Broadcast 与 Colocate 区别?
Broadcast:小表全复制到各节点
Colocate:大表同桶数据本地 Join七、场景设计题
Q18:实时大屏架构?
Kafka → Flink(窗口聚合)→ Doris/StarRocks → 大屏
预聚合 + 缓存 + 限流Q19:高并发报表怎么设计?
1. 预聚合/物化视图
2. 结果缓存
3. 分区裁剪
4. 资源隔离
5. 扩展(副本/节点)Q20:Ad-hoc 查询选型?
灵活查询 → ClickHouse / Doris / StarRocks
湖上即席 → Presto/Trino
列式 + 向量化 + 索引Q21:数据量暴涨怎么办?
1. 扩展节点(分片/存算分离)
2. 分区管理(冷热)
3. 预聚合(降计算)
4. 压缩(降存储)八、高频易错点
| 易错点 | 正确理解 |
|---|---|
| 列式存储不支持写 | 适合批量写 |
| 物化视图一定快 | 需命中 |
| 分区越多越好 | 过细分 overhead |
| 预聚合替代一切 | 只适合固定模式 |
| 引擎越多越好 | 运维复杂 |
九、速答清单
| 高频题 | 一句话答案 |
|---|---|
| 列式为什么快 | 少读列 + 压缩 + 向量化 |
| 分区/分桶 | 裁剪 vs 并行 |
| 预聚合 vs 实时 | 固定 vs 灵活 |
| 物化视图 | 预计算 + 自动命中 |
| Join 优化 | Colocate/Broadcast/RF |
| CH 特点 | 单表极速聚合 |
| Doris 特点 | 高并发强 Join |
| Kylin 特点 | Cube 预计算 |