DuckDB 为什么火?单机 OLAP 什么时候比集群更合适?

第 1101 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. DuckDB 是什么
  3. 为什么火
  4. 典型用法
  5. 什么时候不适合

面试怎么回答

DuckDB 是嵌入式的分析型数据库,没有服务端,嵌在 Python 或命令行里就能用,列式存储加向量化执行,能直接查 S3 上的 Parquet、CSV,也能读 Iceberg 表。它火是因为单机硬件够强,而公司里大量分析任务数据量其实只有几 GB 到几十 GB,为此申请集群、等调度反而更慢。我会把它用在数据探查、数仓 SQL 的本地和 CI 测试、小表的轻量 ETL 和文件格式转换上。数据量超出单机、高并发多用户写、需要权限和资源隔离的平台场景,还是用 Spark 或 Doris、StarRocks 这类集群。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

这两年 DuckDB 在数据圈很火,有人叫它「分析界的 SQLite」。面试官问这个,不是要你背功能,而是看你有没有「不是所有数据都需要上集群」的判断力。

DuckDB 是什么

DuckDB 是一个嵌入式的分析型数据库:

  • 没有服务端,就是一个库,嵌在 Python、Java、命令行里直接用,pip install duckdb 就能跑;
  • 列式存储 + 向量化执行,一次处理一批数据,充分利用 CPU 缓存和多核;
  • 直接查文件:Parquet、CSV、JSON 不用导入,SELECT * FROM 's3://bucket/path/*.parquet' 就能查,也能读 Iceberg、Delta 表;
  • 和 Pandas、Arrow 之间几乎零拷贝互转。

为什么火

  1. 单机能力变强了:一台普通服务器几十核、几百 GB 内存很常见,加上 NVMe 盘,几十 GB 甚至上百 GB 的数据单机几秒到几十秒就能扫完;
  2. 很多数据其实不大:公司里大量分析任务处理的是一个分区、一张维表、一份导出文件,为它申请 Spark 资源、等调度,比算本身还慢;
  3. 零运维:不用部署集群、不用排队,开发调试和临时分析效率高很多。

典型用法

  • 数据探查和临时分析:直接查数据湖里的 Parquet,看分布、查问题;
  • SQL 的本地测试:在 CI 里用 DuckDB 跑数仓 SQL 的单元测试,造几行数据验证逻辑;
  • 轻量 ETL:小表的清洗转换、文件格式转换(CSV 转 Parquet);
  • 嵌入到应用里:给报表服务、数据产品做本地计算引擎。

什么时候不适合

  • 数据量超过单机能力,或者需要多台机器并行的大作业,还是 Spark、Doris、StarRocks;
  • 高并发、多用户同时写的场景:DuckDB 同一时间只适合一个进程写,不是拿来当线上服务数据库的;
  • 需要权限管理、资源隔离、多租户的企业级分析平台。