提起数据库应用, 大家首先想到什么?
别着急回答, 思考10秒.
我个人想到的肯定是那些后端应用啊, 因为后端应用直接使用数据库.
也许有人会说不对啊, 前端也能直接使用数据库啊. 例如 PostgREST , 完全架空后端, 直接调用API即可操纵数据库. 使用 PostgREST 开发的模式通常被称为 “两层架构” (Two-tier Architecture)。在这种模式下,前端直接通过 HTTP 与数据库对话,完全“绕过”了传统意义上用 Java、Python 或 Node.js 编写的中间业务逻辑层。
也许还有人会说, AI啊, 现在都AI agent在调用数据库, 最典型的是RAG. 或者支持tools功能的LLM 和数据库MCP, LLM直接发起function call调用数据库SQL.
不过你万万想不到的是: 浏览器!
浏览器正成为新的数据库应用!
为什么? 总结起来就3个关键词: DuckDB-WASM + 对象存储 + pushdown
DuckDB-WASM 让你在浏览器中可直接运行DuckDB数据库, 这个数据库小巧但功能强大, 本身具备OLAP顶级梯队的性能.
同时DuckDB内置的各种插件可以访问远程数据库(例如 存储在OSS远程的 iceberg, parquet, 等)
支持下推, 当本地算力不足, 带宽肯定不足的情况下, 下推是最好的选择.
有这几点作为基础, 浏览器还不能成为数据库应用么? 在阅读下面的内容之前, 可通过这个链接尝鲜: https://duckdb.org/visualizer/?iceberg
这个问题留给读者吧, 我第一个想到的可能是数据分析师、数据科学家、学生、老师.
发挥你的想象力, 可能还有更多.
作为数据库厂商: 你应该思考一下, 是不是要发行WASM版? 抓住这些用户, 先不管它能不能赚钱, 先截住用户、培养用户感情啊!
下面的内容翻译自duckdb blog, 看看他们怎么打造浏览器数据库应用的?
https://duckdb.org/2025/12/16/iceberg-in-the-browser
摘要(TL;DR): DuckDB 是首个在浏览器标签页内实现与 Iceberg REST Catalog 全链路交互的界面。现在,您可以直接从浏览器读取和写入 Iceberg Catalog 中的表,而无需管理任何基础设施!
在这篇文章中,我们将描述当前与 Iceberg Catalog 交互的模式,并提出一个问题:这能在浏览器中完成吗?在详细阐述为实现这一功能而对 DuckDB 生态系统进行的更改后,我们将演示我们与 Iceberg REST Catalog 交互的方法。它仅限浏览器,无需额外设置。

Iceberg 是一种开放表格格式,它允许您将可变的数据库表捕获为对象存储(如 AWS S3)上的一组静态文件。Iceberg Catalog 允许您跟踪和组织 Iceberg 表。例如,Iceberg REST Catalog 通过 REST API 提供这些功能。
与 Iceberg Catalog 交互通常有两种方式:
Iceberg 引擎遵循这些交互模式:它们要么运行在托管的计算基础设施中,要么由用户在本地运行。让我们看看加入 DuckDB 后情况如何!

DuckDB 支持两种 Iceberg 交互模式。在客户端-服务器模式下,DuckDB 运行在服务器上读取 Iceberg 数据集。从用户的角度来看,引擎的选择是透明的,DuckDB 只是服务器在后台可能使用的众多引擎之一。
客户端即服务器模式更有趣:在这种模式下,用户在本地安装 DuckDB 客户端,并通过其 SQL 界面来查询 Iceberg Catalog。例如:
CREATE SECRET test_secret (
TYPE S3,
KEY_ID 'AKIAIOSFODNN7EXAMPLE',
SECRET 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY');
ATTACH 'warehouse' AS db (
TYPE ICEBERG,
ENDPOINT_URL 'https://your-iceberg-endpoint',);
SELECT sum(value)
FROM db.table
WHERE other_column = 'some_value';
“客户端即服务器”模式解锁了强大的客户端,它们可以直接对数据进行操作。
您可以在我们早期的博客文章中发现 DuckDB-Iceberg 扩展的完整功能集,包括插入和更新能力。
虽然设置本地 DuckDB 安装非常简单,但打开浏览器标签页甚至更快。因此,我们问自己:我们能否直接在浏览器标签页中支持“客户端即服务器”模式?这可以为与 Iceberg Catalog 交互提供一个零设置、无基础设施、真正的无服务器(Serverless)选项。

幸运的是,DuckDB 有一个可以在任何浏览器中运行的客户端!DuckDB-Wasm 是 DuckDB 的 WebAssembly 移植版,它支持加载扩展插件。
与 Iceberg REST Catalog 交互需要多项功能:通过 HTTP(S) 与 REST API 通信的能力、在对象存储上读取和写入 avro 和 parquet 文件的能力,以及代表用户协商身份验证以访问这些资源的能力。所有这些都必须在浏览器中完成,而不调用任何原生组件。
为了支持这些功能,我们实现了以下高层级的变更:
结果是,您现在可以直接在浏览器中运行 DuckDB 来查询 Iceberg!现在,您可以利用浏览器标签页的隔离性,通过客户端-服务器、客户端即服务器或纯粹的无服务器方式访问同一个 Iceberg Catalog!
要查看无服务器 Iceberg 的演示,请访问我们的表格可视化工具:duckdb.org/visualizer?iceberg。
演示中的当前凭据通过一个权限极小的临时账户提供。如果您输入自己的凭据并共享链接,您将共享您的凭据。
通过替换为您自己的 S3 Tables 存储桶 ARN 和具有 AmazonS3TablesReadOnlyAccess 策略的凭据,您也可以访问您的目录、元数据和数据。计算完全在本地进行,凭据和仓库 ID 仅发送到您在 ATTACH 命令中指定的 Catalog 端点。输入会被转换为 SQL,并添加到 URL 的 hash 分段中。
这意味着:
duckdb.org。截至今天,这已支持 Amazon S3 Tables。这是通过与 Amazon S3 Tables 团队合作实现的。要了解有关 S3 Tables、如何入门及其功能集的更多信息,可以查看其产品页面或文档。AWS re:Invent 2025 上演示了 DuckDB 从浏览器查询 S3 Tables 的案例 —— 查看演示稿。
DuckDB-Iceberg 扩展现在已获得 DuckDB-Wasm 的支持,它可以读取和编辑 Iceberg REST Catalog。用户现在可以从浏览器内部访问 Iceberg 数据,而无需安装或管理任何计算节点!