DuckDB 是一种新的 SQL 执行引擎,在去年受到了广泛关注。类似的项目还有很多,那么DuckDB有何特别之处呢?首先它的操作非常简单。它是一个独立的 C++ 库,没有依赖项,因此很容易合并到更大的项目中。第二,速度快。它融合了关键思想,即列向量化执行,使现代分析数据库变得更快。
但 DuckDB 到底有多快?粉丝经常将其与 Postgres 或 SQLite 等系统进行比较,但这些都是TP数据库,在分析工作负载方面并不是特别快。我们想知道 DuckDB 与在类似硬件上运行的最佳分析数据库相比如何。基准测试如下。
如何配置 DuckDB?
在 Google Cloud 上以 3 种配置运行 DuckDB:
Configuration | vCPU (cores) | Memory (GB) |
t2d-standard-8 | 8 | 32 |
t2d-standard-16 | 16 | 64 |
t2d-standard-32 | 32 | 128 |
使用 DuckDB 的内置 tpcds 扩展来生成 TPC-DS 数据集和查询。为了了解性能如何随数据大小变化,我为每个配置生成了三个不同大小的数据集:相对较小的大小、中等大小和较大的大小。
Configuration / Scale | Small | Medium | Large |
t2d-standard-8 | 63 GB | 125 GB | 250 GB |
t2d-standard-16 | 125 GB | 250 GB | 500 GB |
t2d-standard-32 | 250 GB | 500 GB | 1000 GB |
使用 Python 脚本生成数据并在 DuckDB 上执行查询。
如何配置数据库 X?
为了进行比较,我使用了商业数据仓库X,尽力用类似的硬件配置它。我导出了 DuckDB 生成的相同数据并将其导入到数据库 X 中。
发现了什么?
对于小型数据集和小型硬件,DuckDB 速度更快。对于更大的数据集和更大的硬件,数据库 X 的速度更快。在下图中每条线代表一个配置。可以看到对于给定数量的 CPU,当数据较小时,DuckDB 速度更快,但随着数据变大,速度会急剧减慢。

我们可以通过稍微不同地绘制相同的数据来深入了解正在发生的情况。这里每行代表每个 CPU 的恒定数据。对于数据库 X,如果我们同时将数据大小和 CPU 数量加倍,性能将保持不变。DuckDB 则不然。DuckDB 不擅长将大量数据划分到多个 CPU 核心上。换句话说,Database X 可以线性扩展,而 DuckDB 则不能。

尽管如此,对于这样一个年轻的数据库管理系统来说,这是一个极其令人印象深刻的性能。我们应该预期,随着时间的推移,DuckDB 的线性扩展能力将会提高。
等等,还有更多
我还在 2021 年 Macbook Pro 上对 DuckDB 进行了基准测试。它具有 10 核 M1 Pro CPU 和 32 GB RAM。我生成了 78 GB、156 GB 和 313 GB 规模的 TPC-DS 数据,这与其他测试配置的每 CPU 规模大致匹配。

Macbook Pro 令人印象深刻。它的性能优于 16 核服务器。如果你是一名分析师,拥有一台最新的 Macbook Pro 和一个小型数据仓库,那么用来编写 SQL 查询的笔记本电脑可能比运行它们的数据仓库更快。
这对数据生态系统意味着什么?
对我来说最令人惊讶的发现就是 Macbook Pro 的速度有多快。对于人们实际拥有的数据大小,办公桌上的计算机可能与数据仓库竞争,特别是当数据仓库由许多用户共享时。而且这种趋势还在继续——我的 Macbook 已经用了快两年了!通过将工作转移给客户,我们有巨大的机会来节省资金并改善最终用户体验。具有讽刺意味的是,这将是商业智能工具近期趋势的逆转。但最终用户机器日益强大的力量是一股不可抗拒的力量,也是一个不可抗拒的机遇。
原文始发于微信公众号(漫谈大数据):DuckDB 到底有多快?
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159588.html