返回资讯中心
外部精选
软件工程
#开发者实时流

Query.Farm 发布 Haybarn 2.0,升级至 DuckDB 2.0.0 并加速浏览器启动

来源标题:Haybarn 2.0: DuckDB 2.0 with a much faster start in the browser

Query.Farm 发布 Haybarn 2.0,将这一 DuckDB 发行版升级到 DuckDB 2.0.0,覆盖 CLI、各语言客户端和扩展。当前引擎与原生客户端为 rc11,WebAssembly 为 rc12,后者相比 rc11 仅加快了网页 shell 的启动速度。用户可在 Haybarn-Wasm 全页终端中免安装试用,并像桌面版一样安装和加载核心及社区扩展。

Hacker News 最新rustyconover2026/11/5 · 5 天前30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

Haybarn 是 Query.Farm 发行的 DuckDB 版本:相同的引擎、SQL 和文件格式,同时带有自有签名的扩展构建、打包以及少量引擎改动。Haybarn 2.0 将这一切迁移到 DuckDB 2.0.0,覆盖 CLI、各语言库、扩展,以及 Python、Node、Rust、Go、JDBC、ODBC 和 WebAssembly 客户端。 当前版本为引擎和原生客户端的 rc11,以及 WebAssembly 的 rc12,后者与 rc11 的唯一区别是 Web shell 的启动速度更快。软件包目前仍保留候选发布标签,因此下面的命令使用 rc 通道。 若想不安装任何东西就试用,请打开 Haybarn shell:Haybarn-Wasm 在一个全页面终端中运行,其中 INSTALL 和 LOAD 对核心扩展和社区扩展的用法与桌面端一致。 Haybarn 不仅仅是重新构建。它在 DuckDB 之上带有一些改动,本次发布中所有这些改动都迁移到了 2.0.0。主要内容如下,每一项在 How Haybarn differs 中有更详细的说明: 读取远程数据。这些功能位于 Haybarn 构建的 httpfs 中,DuckDB 的版本则完全没有。 在开始开发 Haybarn 2.0 时,我们注意到 DuckDB 2.0 的发布在引擎和各个客户端中都存在一些需要打磨的尖锐问题。每个带有徽标的修复都链接到对应的上游 PR:表示已合并,表示 PR 仍处于打开状态,没有徽标则表示该修复目前仅在 Haybarn 中。 上游 #28245 收集查询结果的线程会满 CPU 空转,直到工作线程完成;在 WebAssembly 中,这可能导致 LOAD 死锁。现在该线程会等待。在一个长尾查询中,进程 CPU 从 5.99 秒降至 4.32 秒。在 48 线程和 48 连接下,吞吐量提升了 13% 到 15%。代价是:在 48 线程下对 2000 万行执行 ORDER BY,中位墙钟时间慢了约 10%。上游 #27738 用 MSVC 构建的扩展在加载到用 clang-cl 构建的 Windows 引擎时可能崩溃,原因是编译器对字符串字面量的池化方式。Haybarn 的 Windows 版本关闭了这种池化,如果该标志丢失,构建就会失败。上游问题为 #27857。 通过 HTTP 响应头行超过 8 KiB 的响应会失败。自十月下旬起,GitHub 的发布下载会发送一个 9.2 KB 的 content-security-policy 行,因此从 GitHub 发布读取 Parquet 文件时,httplib 后端会以 Failed to read connection 失败。Haybarn 将上限提高到 16 KiB,DuckDB 则单独将其提高到 64 KiB。上游 #27825 在 Python 中 Python 3.14 在守护线程仍在扫描对象或 Arrow 数据时退出,可能崩溃或挂起。引擎线程现在在解释器开始关闭后拒绝进入解释器。在我们的压力测试中,两个受影响用例下每 300 次运行的失败次数从 13 和 39 降至零。DuckDB 的 Python 客户端后来已单独修复此问题。上游 #719 在浏览器中(Wasm) HTTP 客户端的 HEAD 请求会将头部记录到控制台,包括 Authorization 和 secrets 的额外头部。上游打开中 #2257 头部值曾被 URL 编码,因此 If-Match 中的带引号 ETag 永远无法匹配,固定范围读取的服务器会返回 412。上游打开中 #2297 通过多线程 bundle 对约 4 MiB 以上的签名扩展执行 LOAD 会永久挂起。对签名进行哈希时每 MiB 启动一个线程,导致线程池耗尽。 下载失败的 worker 脚本会导致启动挂起。在故障注入中,修复前 6 个实例中有 6 个挂起,修复后 20 个实例中 0 个挂起。已死亡的 worker 现在也会拒绝挂起的请求,而不是让它们继续等待。 堆超过 2 GiB 时,HTTP 客户端会读写错误的内存,因为指针被当作有符号数处理。上游问题为 duckdb-wasm#2258。 无论 SET TimeZone 如何设置,TIMESTAMPTZ 列总是以 UTC 返回。上游问题为 duckdb-wasm#2251。 下载与使用 选择你想使用的方式。命令使用候选发布通道,除 ODBC 外,我们针对已发布的软件包运行了每个示例。 运行 CLI 最快的方式是通过 npm 或 uv:

With Node

npx haybarn@rc

With Python

uvx haybarn-cli==2.0.0rc11 你也可以从 GitHub Releases 下载二进制文件并先行验证。在 Apple Silicon 上: BASE=https://github.com/Query-farm-haybarn/haybarn/releases/download/haybarn-v2.0.0-rc11 curl -LO $BASE/haybarn_cli-osx-arm64.zip curl -LO $BASE/SHA256SUMS shasum -a 256 -c SHA256SUMS --ignore-missing gh attestation verify haybarn_cli-osx-arm64.zip --repo Query-farm-haybarn/haybarn unzip haybarn_cli-osx-arm64.zip ./haybarn 其他平台的文件名遵循相同模式:haybarn_cli-linux-amd64.zip、haybarn_cli-linux-arm64.zip 和 haybarn_cli-windows-amd64.zip。安全页面涵盖 GPG 签名。 接下来,就是你熟悉的 DuckDB。扩展无需任何配置即可从 Haybarn 的仓库获取: INSTALL spatial; LOAD spatial; INSTALL rapidfuzz FROM community; LOAD rapidfuzz; SELECT extension_name, extension_version, installed_from FROM duckdb_extensions() WHERE extension_name IN ('spatial', 'rapidfuzz'); 固定扩展版本 Haybarn 会记住你固定的版本,UPDATE EXTENSIONS 不会改动它: FORCE INSTALL a5 FROM community VERSION '462e4d95d8'; UPDATE EXTENSIONS; -- a5 | community | PINNED | 462e4d95d8 | 462e4d95d8 Python --pre 会选取候选发布版本: pip install --pre haybarn import haybarn as duckdb con = duckdb.connect() con.install_extension("spatial") con.load_extension("spatial") print(con.sql("SELECT ST_AsText(ST_Point(1, 2))").fetchall()) 对于直接导入 duckdb 的第三方代码,在其之前添加 import haybarn.compat,这样 import duckdb 就会解析到 Haybarn。 npm install @haybarn/node-api@rc import { DuckDBInstance } from '@haybarn/node-api'; const instance = await DuckDBInstance.create(':memory:'); const conn = await instance.connect(); const result = await conn.runAndReadAll('SELECT version() AS v, 42 AS n'); console.log(result.getRowObjects()); 在浏览器中 npm install @haybarn/haybarn-wasm@rc import * as duckdb from '@haybarn/haybarn-wasm'; const dist = 'https://unpkg.com/@haybarn/[email protected]/dist';

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →