⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
部署 DuckDB-Wasm

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

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

主库组件

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

JS Worker 组件

此组件以三种不同的变体(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://extensons.duckdb.org 更改为指定的存储库。请注意,扩展仍然是签名的,因此最佳方法是下载并以与原始存储库类似的结构提供这些扩展。更多说明请参阅 https://duckdb.net.cn/docs/stable/extensions/extension_distribution#creating-a-custom-repository。

社区扩展在 https://community-extensioions.duckdb.org 提供,并且它们使用不同的密钥签名,因此可以通过以下一次性 SQL 语句禁用它们:

SET allow_community_extensions = false;

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

有关扩展的通用信息,请查阅 https://duckdb.net.cn/docs/stable/extensions/extension_distribution

安全注意事项

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