NEE's Blog

最便宜 MacBook 上的大数据处理

March 12, 2026

本文翻译自 Big Data on the Cheapest MacBook,原载于 Hacker News。

TL;DR

最新入门级 MacBook 在数据库工作负载上表现如何?DuckDB 团队使用 ClickBench 和 TPC-DS SF300 进行了基准测试,发现这台笔记本能够完成所有工作负载,有时结果甚至令人惊喜。


Apple 今天发布了 MacBook Neo,各类科技评测铺天盖地,告诉你它是否适合学生、摄影师或作家。但它们不会告诉你的是:这台设备是否符合 DuckDB 的”本机大数据”理念?

团队决定用数据驱动的方法来回答这个问题,于是去了最近的 Apple Store,买了一台回来测试。

开箱

如果你在欧盟购买这台机器,包装里甚至没有充电器。只有笔记本本身和一根编织 USB-C 线。不过你可能已经有一些 USB-C 充电器了——让我们直接来看看笔记本本身!

硬件规格中唯一可选的是硬盘:256 GB 或 512 GB。由于我们的任务是处理所谓的”大数据”,选择了更大的选项,这使得价格在美国为 700 美元,在欧盟为 800 欧元。内存固定为 8 GB。虽然只有一个 CPU 选项,但这是一个很有趣的选项:这款笔记本搭载的是 6 核 Apple A18 Pro,最初是为 iPhone 16 Pro 构建的。

事实证明,DuckDB 团队之前已经在一些不寻常的情况下测试过这款手机。回到 2024 年,使用 DuckDB v1.2-dev,他们发现 iPhone 16 Pro 可以在大约 10 分钟内完成 scale factor 100 的所有 TPC-H 查询(风冷情况下),而在干冰盒中则不到 8 分钟。MacBook Neo 应该能够轻松处理这个工作负载——但也许它能处理更多。

ClickBench 基准测试

第一个实验使用 ClickBench,这是一个分析型数据库基准测试。ClickBench 有 43 个专注于聚合和过滤操作的查询。这些操作在单个宽表上运行,表有 1 亿行,序列化为 Parquet 时约占 14 GB,CSV 格式存储时占 75 GB。

基准测试环境

团队将 ClickBench 的 DuckDB 实现移植到 macOS,并使用刚刚发布的 v1.5.0 版本在 MacBook Neo 上运行。只做了一个小调整:按照性能指南的建议,将内存限制略微降低到 5 GB,以减少对操作系统交换的依赖,让 DuckDB 处理超出内存工作负载的内存管理。这是内存受限环境中的常见技巧,因为其他进程可能占用超过 20% 的总系统内存。

团队还在两个云实例上使用 DuckDB v1.5.0 重新运行了 ClickBench,形成了以下测试阵容:

  • MacBook Neo:2 个性能核心 + 4 个能效核心,8 GB RAM
  • c6a.4xlarge:16 个 AMD EPYC vCPU 核心,32 GB RAM
  • c8g.metal-48xl:192 个 Graviton4 vCPU 核心,384 GB RAM

基准测试脚本首先将 Parquet 文件加载到数据库中。然后,按照 ClickBench 的规则,每个查询运行三次,以捕获冷运行(缓存为冷时的第一次运行)和热运行(系统有机会利用文件系统缓存等情况)。

结果与分析

实验产生了以下聚合运行时间(秒):

机器 冷运行(中位数) 冷运行(总计) 热运行(中位数) 热运行(总计)
MacBook Neo 0.57 59.73 0.41 54.27
c6a.4xlarge 1.34 145.08 0.50 47.86
c8g.metal-48xl 1.54 169.67 0.05 4.35

冷运行。 结果以一个大惊喜开始:在冷运行中,MacBook Neo 以亚秒级的中位数运行时间获胜,在一分钟内完成了所有查询! 当然,如果深入研究设置,这有一个解释。云实例有网络附加磁盘,访问这些磁盘上的数据库在整体查询运行时间中占主导地位。MacBook Neo 有本地 NVMe SSD,虽然不是同类最佳,但在第一次读取时仍提供相对快速的访问。

热运行。 在热运行中,MacBook 的总运行时间仅提高约 10%,而云机器则发挥出色,c8g.metal-48xl 以一个数量级的优势获胜。然而,值得注意的是,在中位数查询运行时间上,MacBook Neo 仍然可以击败 c6a.4xlarge 这个中型云实例。而且笔记本的总运行时间仅慢约 13%,尽管云机器多了 10 个 CPU 线程和 4 倍的内存。

TPC-DS 基准测试

第二个实验选择了 TPC-DS 基准测试的查询。与无处不在的 TPC-H 基准测试(8 个表,22 个查询)相比,TPC-DS 有 24 个表和 99 个查询,其中许多更复杂,包括窗口函数等功能。而且 TPC-H 已经被优化到极致,TPC-DS 结果仍然有一些参考价值。让我们看看最便宜的 MacBook 能否处理这些查询!

这一轮使用了 DuckDB 的 LTS 版本 v1.4.4。使用 DuckDB 的 tpcds 扩展生成数据集,并将内存限制设置为 6 GB。

在 SF100 下,笔记本轻松完成大多数查询,中位数查询运行时间为 1.63 秒,总运行时间为 15.5 分钟。

在 SF300 下,内存约束开始显现。虽然中位数查询运行时间仍然相当不错,为 6.90 秒,但 DuckDB 偶尔使用高达 80 GB 的空间进行磁盘溢出(spilling to disk),显然有些查询会花费很长时间。最引人注目的是查询 67 耗时 51 分钟完成。但硬件和软件继续不知疲倦地协同工作,最终通过了测试,在 79 分钟内完成了所有查询。

你应该买吗?

事情是这样的:如果你每天都在笔记本上运行大数据工作负载,你可能不应该购买 MacBook Neo。是的,DuckDB 可以在上面运行,并且可以通过利用 out-of-core 处理来处理大量数据。但 MacBook Neo 的磁盘 I/O 与 Air 和 Pro 型号相比相形见绌(约 1.5 GB/s 对比 3-6 GB/s),8 GB 内存长期来看会是限制。如果你需要在移动中处理大数据,并且可以多付一点钱,其他 MacBook 型号会更好地满足你的需求,Linux 和 Windows 也有不错的选择。

也就是说,如果你在云端运行 DuckDB,主要将笔记本用作客户端,这是一台很棒的设备。而且你可以放心,如果你偶尔需要在本地处理一些数据,MacBook Neo 上的 DuckDB 将能够应对挑战。


总结

这篇文章展示了一个有趣的视角:即使是最便宜的 MacBook 也能在特定场景下处理大数据工作负载。关键要点:

  1. 本地存储优势:冷运行中 MacBook Neo 胜出,主要得益于本地 NVMe SSD,避免了网络延迟
  2. 内存管理的重要性:通过合理设置 DuckDB 内存限制,即使只有 8 GB 内存也能处理超出内存的数据集
  3. Out-of-core 处理:DuckDB 的磁盘溢出机制让内存受限的设备也能完成大规模查询
  4. 性价比考量:对于偶尔需要本地数据分析的开发者,入门级设备完全可以胜任

作为一个经常使用 DuckDB 的开发者,这篇测试让我对移动端数据分析有了新的认识。虽然不是日常主力设备,但作为云端分析的客户端加偶尔的本地处理,MacBook Neo 是一个不错的选择。

comments powered by Disqus