① 标题党#
主标题:同样是数据库,DuckDB 凭什么敢说自己"快得离谱"?
备选A:一个进程内的小库,跑分析为什么比得上大集群?
备选B(短视频):DuckDB:卷,是一种美德
② 开场钩子(30 秒)#
都说大数据要上 Spark、要上集群才够快。可我做 DuckDB 这些年,发现一个十几 MB 的库,单机就敢跟集群掰手腕。它凭什么?秘密就在它怎么”摆数据、怎么算数”。
③ 主角特性:列式存储 + 向量化执行#
- 列式存储:数据一列一列排,算 sum/avg/count 只碰需要的列,无关列一个不动。分析型查询天然切中列存。
- 向量化执行:DuckDB 不是一行一行算,而是一次算一整个 block(一批行),把 CPU 的 SIMD 指令用到极致,吞吐量大几个量级。
反常识:行式 OLTP 库(MySQL/PostgreSQL)做分析慢,不是它笨,是”摆数据的方式”根本不对。DuckDB 从设计第一天就为分析而活。
④ 最小可复现#
-- 100 万行,SELECT 只碰一列 —— 列存下几乎不读别的
CREATE TABLE t (id BIGINT, a BIGINT, b BIGINT, ...);
INSERT INTO t SELECT i, i*2, i*3 FROM range(1000000) t(i);
-- 向量化算 sum,单机毫秒级
SELECT sum(a), avg(b) FROM t;sql⑤ 结论#
列存决定了”读多少”,向量化决定了”算多快”。DuckDB 把这两件事从设计第一天就做对了,所以它敢拿单机挑战集群。
⑥ 配图脚本#
行式 vs 列式对比 / SIMD 批量处理示意 / 单机 vs 集群比拼 / 结论卡