提到千万级数据分析,大多数人第一反应是Spark集群或者云数仓。我过去也一样——直到试了DuckDB。

结果出乎意料:4GB内存的笔记本,47秒跑完,零配置、零账单、零集群。

打开网易新闻 查看精彩图片

DuckDB是个嵌入式分析型数据库,定位类似SQLite,但专为OLAP场景设计。它完全在内存运行,采用列式存储和向量化执行。安装只需一行命令:pip install duckdb pandas,没有Docker、没有JVM、没有YAML文件。

我用Python生成了测试数据:1000万条金融交易记录,包含交易ID、用户ID、金额、地区、品类、欺诈标记和时间戳,数据量约0.78GB。

核心查询是个复杂聚合:按地区和品类分组,统计交易笔数、总金额、平均金额、欺诈笔数、欺诈率,以及金额的95分位数,且只取3月份之后的数据。DuckDB直接零拷贝挂载DataFrame,无需导入导出。

查询耗时47.3秒。作为对比,Pandas在这种规模的多维聚合+窗口函数场景下,内存和速度都会吃紧。

DuckDB快在三处设计:

列式存储——只读查询涉及的列,而非整行。上面这个查询只用了5个字段,IO大幅缩减。

向量化执行——批量处理数据,CPU缓存友好,SIMD指令加速。

拷贝集成——与Pandas、Arrow、Polars共享内存,不重复序列化。

什么场景适合用它?探索性数据分析、本地原型验证、小到中型数据集(GB级)、不想为云资源付费的时候。数据量再往上走,或者需要多节点并行,还是得回到分布式方案。

但千万级这个甜点区,很多人其实高估了硬件门槛,低估了单机工具的进化。