土法炼钢兴趣小组的算法知识备份

【分布式 OLAP 查询引擎】引擎选型与数据平台阅读地图

文章导航

分类入口
databasedistributedarchitecture
标签入口
#trino#spark#clickhouse#duckdb#datafusion#postgresql#engine-selection#lakehouse#olap#data-platform

目录

本系列前 17 篇从 SQL 与逻辑计划 追到 Iceberg planner 下推,从 Coordinator/Worker 追到 故障排查。读者最后需要一个 不带营销排名 的收束:我的场景该用哪类引擎、全栈还缺哪几块知识

本文是系列 第 18 篇(末篇)

  1. 选型决策树:交互式联邦、批 ETL、嵌入式分析、流批一体四条路径。
  2. 能力对照表:下推深度、并发模型、湖格式成熟度、运维复杂度——不给假 benchmark
  3. 数据平台全栈阅读地图:postgresql-kernel → columnar-engine → lakehouse → stream-processing → 本系列 的依赖与闭合点。

环境说明:对照表依据各项目 2026 年官方文档(A 级)与系列前文机制;Trino/Spark 吞吐对比不在此篇出现(本机无 JVM 集群实测)。开放问题(Substrait、Velox)标注 B 级前瞻,不冒充结论。


一、数据平台栈:五段闭合

flowchart LR
  PG["postgresql-kernel<br/>行存 OLTP"]
  COL["columnar-engine<br/>列存 OLAP"]
  LAKE["lakehouse<br/>表格式 + 文件"]
  STREAM["stream-processing<br/>实时计算"]
  QE["query-engine<br/>本系列"]
  PG --> COL
  COL --> LAKE
  LAKE --> STREAM
  LAKE --> QE
  STREAM -.->|入湖| LAKE
顺序 系列 核心问题 与本系列接口
1 PostgreSQL 内核 事务、B-Tree、进程内 CBO 第 2、4、6 篇 对照 parse/plan/执行
2 列存引擎 向量化 scan、MergeTree 第 7 篇;DuckDB 存储见 columnar/11
3 Lakehouse Parquet/Iceberg、manifest lakehouse/18 读湖漏斗 ↔︎ 第 15 篇 planner
4 流式处理 Kafka/Flink、入湖 第 1 篇 流批边界;第 16 篇 背压对照
5 query-engine(本系列) SQL → MPP 执行、联邦 闭合「谁在扫 manifest」

闭合点:lakehouse 公式 Lakehouse = 列式文件 + 对象存储 + 表格式 + catalog + 查询引擎 中,前五项由 lakehouse/stream 系列覆盖 文件与表查询引擎 由本系列覆盖 planning 与 MPP。读完 18 篇,读者应能解释:lakehouse/18 的四层漏斗 在 Trino 哪一步被发起第 15 篇),以及 join shuffle 与 spill 如何与裁剪无关地拖慢查询(第 11、16、17 篇)。


二、选型决策树(不排名)

flowchart TD
  START["分析需求"] --> Q1{"需要多用户远程 SQL 服务?"}
  Q1 -->|否| Q2{"数据与并发能否单机?"}
  Q2 -->|是| DDB["DuckDB / 嵌入式 DataFusion"]
  Q2 -->|否| Q3{"以批 ETL + 湖维护为主?"}
  Q1 -->|是| Q3
  Q3 -->|是| SPARK["Spark SQL + Iceberg/Delta 维护"]
  Q3 -->|否| Q4{"亚秒交互 + 多源联邦?"}
  Q4 -->|是| TRINO["Trino / Presto 系"]
  Q4 -->|否| Q5{"自有列存集群 + 高 QPS?"}
  Q5 -->|是| CH["ClickHouse"]
  Q5 -->|否| TRINO
  START --> Q6{"无界流 + 状态?"}
  Q6 -->|是| FLINK["Flink / RisingWave 等<br/>见 stream-processing"]

2.1 路径说明

路径 首选引擎 依据
交互式联邦 Trino 多 connector、低延迟 ad-hoc、resource group(第 10、16 篇
批 ETL + 湖维护 Spark SQL Iceberg/Delta procedure、AQE 批处理(第 13 篇
嵌入式 / 笔记本 DuckDB 无 JVM、读 Parquet/Iceberg(第 14 篇
自研 Rust 数据面 DataFusion 嵌入 TableProvider(第 14 篇)
自有 OLAP 集群 QPS ClickHouse MergeTree 主存储(columnar-engine);湖表作外表
OLTP 点查 PostgreSQL 非本系列主战场
流批一体增量 Flink / RisingWave stream-processing/18;非交互式 OLAP

组合常见:Spark/Flink 写湖 + Trino 交互查湖 + DuckDB CI/本地校验;ClickHouse Serving 层 + 湖作冷数据。


三、能力对照表(口径:自托管读路径,2026 文档)

引擎 交互式联邦 湖格式读 湖写入/维护 并发模型 下推/planning 运维复杂度
Trino Iceberg/Delta/Hive 等 有限(如 optimize) Coordinator 队列 + Worker 分布式 planning + dynamic filter 中:JVM 集群 + catalog
Spark 中(启动开销) (procedure) YARN/K8s 作业 Driver planning + AQE 高:集群 + 作业调度
ClickHouse 强(自有协议) 外表/表函数读 Iceberg/Delta 非主路径 原生分布式 MergeTree 主路径;湖为外部 中:CH 集群
DuckDB 弱(嵌入) Iceberg/Delta 扩展 Iceberg 有限写 单进程多线程 单进程 planning
DataFusion 库(需自建服务) crate 依赖 通常只读 嵌入 可插拔规则 取决于宿主
PostgreSQL OLTP 外表/fdw 非湖仓主引擎 连接级 B-Tree 索引路径 低(已有 DB)

下推深度:四层漏斗定义见 lakehouse/18;planner 发起见 第 15 篇同一 Iceberg 表 上 Trino/Spark/DuckDB 共享 manifest stats;差异在 dynamic filter、分布式 split、写入 procedure

禁止用法:用「Trino 比 Spark 快 N 倍」营销页支撑选型;应用 第 17 篇 的 planning/runtime 分解做 POC。


四、按读者目标的阅读路径

目标 路径
数据平台全栈 PG index → columnar 04 向量化 → lakehouse 01–08 → stream 01 → query-engine 01 → 02 → 04 → 10 → 12 → 15 → 18
从 lakehouse/18 来 query-engine 02 → 03 → 05 → 12 → 15 → 17
Trino 运维 01 → 10 → 12 → 16 → 17 → 18
Spark 转 Trino 01 → 05 → 11 → 12 → 13 → 15
嵌入式分析 columnar 11 DuckDB → query-engine 01 → 07 → 14 → 18

本系列 18 篇内部依赖见 系列 index 第二节 flowchart。


五、开放问题(B 级前瞻)

以下社区方向 尚未形成单一标准答案,选型 POC 时单独评估:

方向 说明 边界
Substrait 跨引擎 logical plan 交换 各引擎导入/导出成熟度不一
Velox C++ 向量化执行库 多作为 Spark/Presto 系加速层嵌入
Unified analytics engine 单引擎 cover 流批交互 工程妥协多,见 stream-processing 与 db-frontier
Iceberg REST / catalog 中心化 planning 减轻 Coordinator manifest IO 依赖 catalog 实现

不在此下「某技术将统一一切」的结论。


六、本系列核心结论收束

  1. 查询引擎 = SQL 前端 + 优化 + 执行 + MPP + Connector 下推第 1 篇)。
  2. 读湖快不快 一半在 布局与 stats(lakehouse),一半在 join/shuffle/内存(本系列 4–11、16–17)。
  3. 嵌入式与分布式 分界在并发与 shuffle,不在「能否读 Parquet」(第 14 篇)。
  4. lakehouse/18 讲漏斗;第 15 篇讲 planner 发起——两篇合读才完整。
  5. 生产稳定性 靠 resource group、统计维护、compaction 与 catalog 健康(第 16–17 篇lakehouse/17–20)。

七、小结

数据平台栈从 行存事务列存扫描开放表格式流式入湖,最后到 交互式 SQL 规划与 MPP——本系列补全最后一块。选型按 远程 SQL、批维护、单机嵌入、流状态 分叉,不按虚构 benchmark 排名。继续深入可阅 数据库索引db-frontier HTAP 与 distributed 理论。


上一篇经典故障与排查

返回 系列目录 · Lakehouse · 流式处理


参考资料

  1. Trino / Spark / DuckDB / ClickHouse / PostgreSQL 官方文档(2026 年 stable 线,A 级)。
  2. 本系列 PLAN.mdindex(系列结构)。
  3. lakehouse/18stream-processing/18(栈闭合)。
  4. Substrait / Velox 社区文档与博客(B 级前瞻)。

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-07 · database / distributed

【分布式 OLAP 查询引擎】Trino · Spark · DuckDB · 优化与 MPP 执行

闭合数据平台栈最后一块:从 SQL 解析与 Calcite 式优化,到 Volcano/向量化执行、Trino Coordinator/Worker 与 shuffle,再到 Iceberg connector 下推与生产排查。承接 lakehouse 第 18 章读湖视角,补全「谁在做 planning」的引擎内核层。

2026-07-07 · database / distributed

【分布式 OLAP 查询引擎】DuckDB 与 DataFusion:嵌入式分析对照

从单进程向量化 pipeline 与 morsel-driven 并行出发,对照 DuckDB 1.5.4 与 Apache DataFusion 的 planner/executor 边界;说明何时选嵌入式读湖、何时必须上 Trino MPP;与 columnar-engine DuckDB 存储篇分工,并用本机实测 EXPLAIN 与 Parquet 投影下推数据锚定结论。


By .