TPC-H SF300 在树莓派上运行

Gábor Szárnyas
2025-01-17 · 5 分钟阅读

TL;DR:DuckDB 可以在树莓派板上运行所有 TPC-H SF300 查询。

更新(2025 年 4 月):本文描述的设置现在可以使用最新稳定版 DuckDB v1.2.2 运行 SF1,000 数据集上的所有 TPC-H 查询

介绍

树莓派是一项旨在提供经济实惠且易于编程的微型计算机板的倡议。2012 年的初始模型配备单核 0.7 GHz CPU、256 MB RAM 和一个 SD 卡插槽,使其成为一个出色的教育平台。随着时间的推移,树莓派基金会推出了越来越强大的型号。最新型号 树莓派 5 拥有 2.4 GHz 四核 CPU,并且——通过额外的连接器——甚至可以使用 NVMe SSD 进行存储。

上周,树莓派 5 获得了另一次升级:现在可以购买配备 16 GB RAM 的版本。DuckDB 团队喜欢在不寻常的设置中试验 DuckDB,例如将智能手机浸入干冰中,因此我们渴望获得一台新的树莓派 5。毕竟,根据 2024 年 12 月 Steam 调查报告,16 GB 内存相当于中位数游戏机中的内存量。那么,树莓派肯定能处理几十 GB 的数据,对吗?我们着手找出答案。

您有很酷的 DuckDB 设置吗?我们很乐意听听您的经验!请在社交媒体上发布或通过电子邮件发送至 [email protected]

设置

我们的设置由以下组件组成,总价为 300 美元:

组件 价格 (美元)
带 16 GB RAM 的树莓派 5 120.00
树莓派 27 W USB-C 电源 13.60
树莓派 microSD 卡 (128 GB) 33.40
三星 980 NVMe SSD (1 TB) 84.00
Argon ONE V3 机箱 49.00
总计 $300.00

我们安装了散热片,将 SSD 安装到位,并组装了机箱。这是我们机器的照片:

Raspberry 5 in an Argon ONE v3 case

实验

那么这个小盒子能做什么呢?我们使用了 TPC-H 工作负载来找出答案。

我们首先将树莓派 OS(Debian Linux 的一个分支)更新到最新版本,即 2024-11-19。然后,我们使用树莓派构建说明编译了 DuckDB 版本 0024e5d4be。为了使查询易于运行,我们还在构建中包含了 TPC-H 扩展

GEN=ninja CORE_EXTENSIONS="tpch" make

然后我们下载了包含不同比例因子(SF)TPC-H 数据集的 DuckDB 数据库文件:

wget https://blobs.duckdb.org/data/tpch-sf100.db
wget https://blobs.duckdb.org/data/tpch-sf300.db

我们对这两种比例因子使用了两种不同的存储选项。第一次运行时,我们将数据库文件存储在 microSD 卡上,这是大多数树莓派设置都具备的存储。这张卡在服务操作系统和程序方面表现良好,也可以存储 DuckDB 数据库,但速度相当慢,特别是对于写入密集型操作,其中就包括溢出到磁盘。因此,第二次运行时,我们将数据库文件放在 1 TB NVMe SSD 硬盘上。

对于测量,我们使用了 tpch-queries.sql 脚本,该脚本对所有 TPC-H 查询(从 Q1Q22)执行冷运行。

tpch-queries.sql
PRAGMA version;
SET enable_progress_bar = false;
LOAD tpch;
.timer on
PRAGMA tpch(1);
PRAGMA tpch(2);
PRAGMA tpch(3);
PRAGMA tpch(4);
PRAGMA tpch(5);
PRAGMA tpch(6);
PRAGMA tpch(7);
PRAGMA tpch(8);
PRAGMA tpch(9);
PRAGMA tpch(10);
PRAGMA tpch(11);
PRAGMA tpch(12);
PRAGMA tpch(13);
PRAGMA tpch(14);
PRAGMA tpch(15);
PRAGMA tpch(16);
PRAGMA tpch(17);
PRAGMA tpch(18);
PRAGMA tpch(19);
PRAGMA tpch(20);
PRAGMA tpch(21);
PRAGMA tpch(22);

我们按如下方式运行了脚本:

duckdb tpch-sf${SF}.db -f tpch-queries.sql

我们没有遇到任何崩溃、错误或不正确的结果。下表包含聚合运行时间:

比例因子 存储 几何平均运行时间 总运行时间
SF100 microSD 卡 23.8 秒 769.9 秒
SF100 NVMe SSD 11.7 秒 372.3 秒
SF300 microSD 卡 171.9 秒 4,866.5 秒
SF300 NVMe SSD 55.2 秒 1,561.8 秒

聚合运行时间

对于 SF100 数据集,使用 microSD 卡时的几何平均运行时间为 23.8 秒,使用 NVMe 磁盘时为 11.7 秒。后者与我们使用 三星 S24 Ultra 获得的 7.5 秒相差不远,而 S24 Ultra 拥有 8 个 CPU 内核,其中大部分运行频率高于树莓派的内核。

对于 SF300 数据集,由于系统内存有限,DuckDB 不得不更多地溢出到磁盘。这导致使用 microSD 卡设置时查询相对较慢,几何平均值为 171.9 秒。然而,切换到 NVMe 磁盘带来了 3 倍的改进,将几何平均值降低到 55.2 秒。

单个查询运行时间

如果您对单个查询运行时间感兴趣,可以在下面找到它们。

查询运行时间(秒)
查询SF100 / microSDSF100 / NVMeSF300 / microSDSF300 / NVMe
Q181.115.6242.055.1
Q27.92.427.87.9
Q331.511.8218.952.7
Q440.211.4157.540.9
Q532.212.3215.954.1
Q61.61.4155.932.7
Q712.112.3255.269.6
Q825.019.2298.077.8
Q974.050.1337.2147.7
Q1054.724.3234.982.6
Q117.82.334.014.9
Q1243.113.6202.950.5
Q1359.251.7207.4177.2
Q1433.09.7269.759.0
Q1511.17.1157.239.6
Q168.78.733.427.1
Q178.37.6249.466.2
Q1873.940.9374.7177.1
Q1966.017.8317.973.8
Q2022.48.4273.156.0
Q2166.935.2569.5172.5
Q229.28.434.126.7
几何平均23.811.7171.955.2
总计769.9372.34,866.51,561.8

展望

为了将我们的结果置于更广阔的背景中,我们查看了 历史 TPC-H 结果,发现 20 年前的一些企业解决方案具有相似的查询性能,它们的查询运行时间几何平均值通常超过 60 秒。当时,这些系统——计入软件许可和维护成本——定价约为 30 万美元!这意味着——如果你忽略维护方面——过去 20 年来,TPC 读取查询的“性价比”(又称价格-性能比)提升了约 1,000 倍。这充分展示了硬件和软件的持续创新在现代系统中所能实现的能力。

免责声明:此处显示的结果并非官方 TPC-H 结果,且仅包含 TPC-H 的读取查询。

总结

我们展示了您可以在成本为 300 美元的树莓派设置中使用 DuckDB,并在不到 30 分钟内运行 TPC-H SF300 数据集上的所有查询。

希望您喜欢这篇博客文章。如果您有有趣的 DuckDB 设置,别忘了与我们分享!