Rebas Daily PERSONAL AI DAILY — 自动选题 · 核查 · 撰写 NO.078 — 2026-09-20
NEWS 约 5 分钟

DuckDB把数据库留在浏览器里

DuckDB-Wasm接上OPFS,让网页里的数据库关掉重开后仍能继续使用。

IMAGE — DuckDB Blog

你在网页里整理了一份消费记录,做完分类和汇总,第二天重新打开,却发现数据全没了。早期的 DuckDB-Wasm 就有这个问题:它能在网页中运行数据库,但标签页一关,数据库也随之消失。如今,DuckDB-Wasm 可以把数据写进浏览器提供的 OPFS,让一次性的网页分析变成能够反复使用的本地数据应用。

这里的事实与版本表现均来自 DuckDB 官方博客,尚无浏览器厂商或第三方测试交叉印证。

以前能分析,却留不住

DuckDB 是一种嵌入式分析数据库,擅长扫描、筛选和汇总表格数据。它不要求开发者另外维护一台数据库服务器,可以直接放进应用里。DuckDB-Wasm 则把它编译为 WebAssembly——一种能在浏览器沙箱中高效运行的二进制格式。于是,网页可以直接执行 SQL,数据不必先上传到后端。

但 2021 年 DuckDB-Wasm 发布时,数据库只存在于 Wasm heap,也就是网页运行期间使用的一块内存。关闭标签页,这块内存便被释放。

想保留数据,应用开发者需要先把表序列化成 Parquet 文件,再把文件字节存入 IndexedDB,等下次加载时重新注册。IndexedDB 是浏览器内置的持久化存储,但这套导出、保存和恢复流程都得由应用自己编排,DuckDB-Wasm 没有直接提供持久数据库。

现在,数据库有了自己的“抽屉”

改变来自 OPFS,即 Origin Private File System。它是浏览器按网站来源隔离的私有文件系统,支持随机读写。可以把它理解为网站在浏览器沙箱里独享的文件抽屉:别的网站不能混用,数据库却能像操作文件一样反复读取和修改其中的数据。

据 DuckDB 官方博客,现代浏览器自 2023 年 3 月起提供 OPFS。经其使用 DuckDB-Wasm 1.32.01.33.1-dev64.0 测试,开发者可以用 opfs://analytics.duckdb 路径及 READ_WRITE 模式打开数据库。页面刷新或浏览器重启后,这个数据库仍可继续使用。

写入 OPFS 的不是应用临时拼装的数据快照,而是常规的 .duckdb 数据库文件。它还使用 write-ahead log(预写日志,即先记录即将发生的修改,以便维护写入过程)和 checkpoint(检查点,把日志中的修改归并进数据库文件)。官方示例创建交易表、插入一行并执行 CHECKPOINT;重新加载页面后再次运行,原表仍在,新记录会接着写入,查询计数变为 2。应用不再需要额外同步、导出,也不用保存一个 localStorage 键来寻找旧数据。

Worker 脚本必须与网页同源。官方示例因此用 Blob 包装 CDN 上的 worker 地址,再创建 Worker。这是运行配置的一部分,并非 OPFS 自动替开发者处理。

不只是保存,也能少下载一次

这套机制还能把远程数据变成本地缓存。官方示例首次从远程地址读取约 1,500 行的 TPC-H orders 表,并将其写入持久数据库。由于建表语句使用 IF NOT EXISTS,后续加载会直接读取 OPFS,不再向原地址请求同一份文件。开发者可以通过浏览器 Network 面板或 DuckDB-Wasm 日志确认请求是否消失。

分析产生的汇总结果也可以写成 Parquet 文件,放进 opfs://cache/ 等路径,稍后继续查询。缺少的嵌套目录会按需建立。换句话说,网页不只记住原始数据,也能留下清洗后的表和计算结果。

这值得关注,因为变化不在于 SQL 又快了一点,而在于应用形态变了。以前,浏览器里的数据库更像临时工作台;现在,它可以承接需要多次打开、持续积累数据的本地分析工具,同时仍让数据留在浏览器一侧。

版本坑比功能本身更要紧

供稿发布时,npm 标为 latest1.33.1-dev57.0 实际不能完成持久化。它会创建 OPFS 文件,却不会把数据写进去。官方给出的原因是:程序把 opfs://analytics.duckdb 规范化成只有一个斜杠的 opfs:/analytics.duckdb,结果无法匹配 OPFS handle。

因此,不能简单地说“安装最新版即可”。官方建议固定使用 @duckdb/[email protected],或采用 1.33.1-dev64.0 及更高版本。这个细节也提醒人们:一项能力出现在文档和代码里,不等于当时默认安装到的版本已经可靠可用。

局限与未知

  • “现代浏览器支持 OPFS”不等于所有浏览器、版本和运行环境都兼容;材料没有提供跨浏览器测试数据。
  • OPFS 是网站私有的沙箱存储,不是用户在普通文件夹里直接看到的文件。其配额、隐私模式表现,以及清理站点数据后的生命周期,材料均未说明。
  • 持久化表现、故障原因和可用版本都来自 DuckDB 官方单一信源,仍缺少独立复现结果。

供稿材料 SOURCES — 1

← 返回 2026-09-20 · 数据板块