⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
部署 DuckDB-Wasm

DuckDB-Wasm 的部署需要访问以下组件:

  • DuckDB-Wasm 主库组件,以 TypeScript 发布并编译为 JavaScript 代码
  • DuckDB-Wasm Worker 组件,编译为 JavaScript 代码,在多线程环境中可能会多次实例化
  • DuckDB-Wasm 模块,编译为 WebAssembly 文件并由浏览器实例化
  • 任何相关的 DuckDB-Wasm 扩展

主库组件

它在 npm 的 duckdb-wasm 包中以 TypeScript 代码或 CommonJS JavaScript 代码的形式发布,既可以与给定应用程序打包在一起,也可以在同源(子)域中提供并在运行时包含,或者从 JSDelivery 等第三方 CDN 提供。由于它需要知道后续文件的位置才能正常运行,因此它确实需要某种形式的转译,不能直接使用。具体细节取决于您的设置,示例可在 https://github.com/duckdb/duckdb-wasm/tree/main/examples 找到。一个部署示例是 https://shell.duckdb.org,它将主库组件与 shell 代码一起转译(第一种方法)。或者参考 https://github.com/duckdb/duckdb-wasm/tree/main/examples/bare-browser 下的 bare-browser 示例。

JS Worker 组件

它以 3 种不同的版本发布:mvpehthreads,作为 JavaScript 文件分发,需要按原样提供。主库组件需要被告知其实际位置。

针对 3 种不同的 平台 有 3 种变体:

  • mvp 针对 WebAssembly 1.0 规范
  • eh 针对带有 Wasm 级异常处理的 WebAssembly 1.0 规范,这提高了性能
  • threads 针对带有异常和线程结构的 WebAssembly 规范

您可以提供全部 3 个版本并进行特性检测,或者仅提供一个变体并指示 duckdb-wasm 库使用哪一个

Wasm Worker 组件

与 JS Worker 组件相同,有 3 种不同的版本:mvpehthreads,每个版本都是相关 JS 组件所必需的。这些 WebAssembly 模块需要按原样在主域可访问的任意 [子] 域中提供。

DuckDB 扩展

DuckDB-Wasm 的 DuckDB 扩展(类似于原生情况)在默认扩展端点 https://extensions.duckdb.org 处以签名形式提供。如果您正在部署 duckdb-wasm,可以考虑在不同的端点镜像相关扩展,从而可能允许在内部网络上进行完全隔离的部署。

SET custom_extension_repository = 'https://some.endpoint.org/path/to/repository';

将默认扩展仓库从公共的 https://extensions.duckdb.org 更改为指定的仓库。请注意,扩展仍然是经过签名的,因此最佳途径是以与原始仓库类似的结构下载并提供扩展。请参阅 https://duckdb.org.cn/docs/stable/extensions/extension_distribution#creating-a-custom-repository 处的附加说明。

社区扩展在 https://community-extensions.duckdb.org 提供,它们使用不同的密钥签名,因此可以通过单向 SQL 语句禁用它们,例如:

SET allow_community_extensions = false;

这将允许加载核心 DuckDB 扩展。请注意,失败发生在 LOAD 时,而不是 INSTALL 时。

有关扩展的一般信息,请查阅 https://duckdb.org.cn/docs/stable/extensions/extension_distribution

安全注意事项

警告:部署具有自身数据访问权限的 DuckDB-Wasm 意味着任何有权执行 SQL 的人都可以访问 DuckDB-Wasm 能访问的数据。此外,默认设置下的 DuckDB-Wasm 可以访问远程端点,因此即使在沙箱内,它也可能对外部世界产生可见影响。

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南