最近DuckDB在国内越来越火,很多人都会问一个问题,DuckDB到底能处理多大数据集,1TB, 10TB 还是 100TB?
其实我还真没考虑过这个问题,我工作中根本没有碰到过这样体量的数据,我的硬盘最大也才1TB。
不过既然有人问了,我也有些好奇,自己不跑,看看别人的报告也是好的,还真是让我找到了一份,这里分享给大家。
想必很多人都看了昨天分享给大家的多款OLAP数据库大比拼。今天的这份报告依然以顺利完成22个TPC-H Query为基准。
本机模式(Macbook Pro)
云服务器(AWS)
结论
• 本地+小型?
选择 DuckDB 或 Polars。对于小型数据(10GB 或更小),Polars 和 DuckDB(或 pandas)非常合适。而 Dask 和 Spark 在这种配置下性能会损失很多。
• 本地+大数据?
选择 Dask 或 DuckDB。对于更大的数据,Polars 尚未完全稳定。不过,Polars 正在快速改进,并且是这个组中最动态的项目。DuckDB 更可靠(Dask 也是,但速度慢)。Spark 在这里很容易失败。如果你想对 100GB 本地数据执行 SQL 查询,DuckDB 是明智的选择。
• 云存储空间在 1 TB 以下?
选择 Dask 或 DuckDB。对于能够放入单个云虚拟机的数据集,Dask 和 DuckDB 通常优于 Spark 和 Polars。当我们迁移到云端时,快速本地系统(Polars/DuckDB)和分布式系统(Dask/Spark)之间的性能差距会很大,这主要是因为 S3 访问瓶颈(即使你速度很快,但如果等待 S3 获取数据,也是无济于事)。DuckDB 在相同硬件上跨不同规模表现良好,但无法扩展到单个虚拟机之外。
• 大规模云计算?
选择 Dask 或 Spark。DuckDB 在单个大型虚拟机上可以像 Dask 或 Spark 一样高效,但如果你想快速处理大量数据,最终需要一个可扩展的系统。Dask 和 Spark 可以通过添加更多硬件在更大的问题上胜过 DuckDB 和 Polars。对于大规模计算,Dask 通常优于 Spark,并且可以很好地扩展,超过 DuckDB 和 Polars。
有兴趣的可以看看这篇文章https://docs.coiled.io/blog/tpch.html