DeepSeek总结的Quack:DuckDB 客户端-服务器协议(二)

来源:https://motherduck.com/blog/duckdb-client-server/

如果它叫起来像鸭子:DuckDB 客户端-服务器协议

作者: Jordan Tigani
日期: 2026/05/12
阅读时间: 9 分钟

今天,DuckDB Labs 发布了"Quack",这是 DuckDB 的客户端-服务器协议。这让人兴奋,原因有很多,并标志着 DuckDB 演进中的一个新步骤。几乎其他所有数据库都有客户端-服务器协议,DuckDB 中出现一个也是自然而然的事。人们早已在自行构建,有着不同的完善程度,因此 DuckDB 构建一个官方版本是合情合理的。

我们 MotherDuck 坚信 DuckDB 既可以作为客户端也可以作为服务器;我们以这种方式运行已近四年,很高兴看到这个概念在 DuckDB 中获得主流采用。我们预计在今年晚些时候为 MotherDuck 用户支持 Quack。我们已经在预览版 Quack 中进行了尝试,并期待新协议能为 DuckDB 社区带来什么。

什么是 Quack?

Quack 允许你以服务器方式启动一个 DuckDB 实例,并从其他同样运行 DuckDB 的客户端连接到它。Quack 使用 HTTP 进行通信,这意味着它应该非常健壮,并且适用于各种网络环境。它使用自定义协议,序列化 DuckDB 的内部数据向量块,而不是将它们转码为另一种格式。这减少了开销,因为客户端或服务器端都不需要进行转换。

主要的好处是这将允许多个 DuckDB 进程同时写入同一个数据库。如果你以常规的嵌入式模式运行 DuckDB,为写入而打开数据库会导致文件被锁定;这意味着你一次只能有一个写入者。但如果写入者进程是一个服务器,你可以从任意数量的客户端连接到它。

目前,身份验证、授权和安全性都是基础的。服务器和客户端之间共享一个令牌,需要用它来连接。默认情况下,这使用 HTTP 而不是 HTTPS,因此通信未加密。而且由于 DuckDB 没有用户的概念,没有办法向不同类型的用户授予不同类型的访问权限。当然,DuckDB 提供了丰富的可扩展性,因此人们可以自己构建这些功能。

当然,还可以用这个做其他很酷的事情,比如能够将 DuckDB 用作 DuckLake 的目录服务器。我期待着看到人们还会想出什么其他聪明的主意。

MotherDuck 与 Quack 有何不同?

MotherDuck 是一个云托管的 DuckDB。Quack 允许你连接到一个你自己作为服务运行的远程 DuckDB。粗略一看,这听起来像是你可以在某个 EC2 服务器上运行带有 Quack 扩展的 DuckDB,然后你就拥有一个数据仓库了,对吧?答案是,"嗯,这取决于你需要什么。"

我们 MotherDuck 鼓励并支持人们自己运行 Quack。这能推动创新,推动 DuckDB 生态系统向前发展,进而推动 MotherDuck 向前发展。DuckDB 将会有更多的用例,这对于任何希望 DuckDB 成功的人来说都是一件好事。开源社区对许多云服务都非常有益,MotherDuck 也不例外。

DuckDB 是一个独特的数据库,有许多用例。过去几年,我们在 MotherDuck 一直在塑造其特性,并帮助它成为一个驱动健壮数据仓库的引擎。在此过程中,我们解决了一些重要的挑战。考虑到这项新功能,我认为重点强调一些"为什么选择 MotherDuck 而不是自托管 DuckDB"的理由会是个好主意。

  • 多用户权限。 DuckDB 一直是一个单用户数据库,但组织拥有不同用户,他们有不同需求和不同访问级别。Quack 允许多个用户使用共享令牌与同一个 DuckDB 数据库通信,但这些用户实际上都具有相同的身份,可以访问相同的数据。用户管理对于部署生产数据仓库至关重要,这就是为什么 MotherDuck 允许你在组织中创建和管理多个用户,并通过 SCIM 同步用户。我们还构建了服务账户,可以作为共享资源供数据摄取和 BI 工具使用。
  • 数据共享。 数据共享的概念与多用户模型紧密相连。在 MotherDuck 中,你通过共享授予对数据库的访问权限,这些共享是授予组织、特定用户或公众的访问权限。DuckDB 本身没有共享的概念,它是全有或全无;你要么有访问权限,要么没有。
  • 身份验证。 身份验证是向计算机或服务证明你是谁的行为,已经出现了许多标准来封装这方面的难点。Quack 中的身份验证尽可能简单,只是一个共享密钥。这对于一些简单的场景可能没问题,但在生产环境中,你会希望有更多选择。在 MotherDuck 中,你可以使用基于浏览器的身份验证、短期和长期基于令牌的身份验证,或者使用你喜欢的身份验证提供商的单点登录(SSO)进行身份验证。
  • 存储与计算分离。 云数据管理的关键创新之一是将计算与存储分离。MotherDuck 通过运行我们自己的差异化存储引擎来分离存储和计算。我们运行着大量的 DuckDB 实例,这让你可以无缝地从一个实例故障转移到另一个实例,扩展或缩减实例,而永远不必担心数据的持久性。它就是这样有效。虽然 Quack 可以写入网络存储或 Iceberg,但你基本上仍然绑定到单个计算实例。在 MotherDuck 中,你可以轻松地将读取扩展到多个 DuckDB 实例,或者在不需要时关闭 DuckDB。当你需要时,它会在几毫秒内回来。
  • 分层存储。 MotherDuck 的存储系统是分层的,既可以实现低延迟和持久性,又不会花费太多钱。数据最低层存储在对象存储上,然后缓存到快速 SSD 和内存中。对象存储层提供了持久性和低成本,而共享 SSD 和内存缓存提供了低延迟。
  • 差异化存储。 DuckDB 在为写入而打开时会锁定数据库文件。它还只维护数据的一个副本,即最新的快照。由 Quack 驱动的 DuckDB 服务器具有相同的行为。在 MotherDuck,我们构建了一个与 DuckDB 紧密集成的差异化存储引擎。这允许多个其他机器上的读取者读取数据库的一致性快照。它还允许时间旅行和零拷贝克隆,以实现高效的变更。在 Quack 中,如果数据库被打开用于写入,你就不能同时有读取者,或者至少不能来自不同的 DuckDB 实例。
  • 超多租户。 MotherDuck 为每个用户提供他们自己的 DuckDB 实例。这意味着不同的用户相互隔离,你永远不必担心另一个用户或另一个工作负载会拖慢你的速度。如果你有成千上万的用户,每个人仍然独立地在专用硬件上运行,并且你可以立即缩减到零。
  • 无服务器。 MotherDuck 实例会响应查询请求而立即启动,并在查询完成后关闭。所以你永远不必担心启动和关闭实例。分析工作负载是无服务器架构的理想目标,我们相信管理实例生命周期并不是你会从中找到乐趣的事情。如果你运行一个 Quack 服务器,你必须手动启动和停止实例。
  • 支持、服务等级协议(SLA)和可观测性。 MotherDuck 为商业层提供 99.9% 的可用性 SLA,所有付费用户都能获得支持。问题能得到快速解决。如果你真的想运行一个生产数据仓库,有一个可以求助、能让你快速恢复运行的人是非常有帮助的。此外,MotherDuck 提供了让你了解 DuckDB 实例运行状况的工具。在一个完美的世界里,你永远不需要它们,但当需要时,它们会派上用场。
  • Postgres 端点。 今年早些时候,我们发布了 Postgres 端点,允许用户通过 Postgres 生态系统连接到 MotherDuck。尽管 DuckDB 的支持正在增长,但几乎每个工具都知道如何使用 Postgres 协议。通过该端点,任何 Postgres 客户端都可以连接到 MotherDuck 并将其用作 Postgres 数据库。我们都相信 DuckDB 是未来,但拥有通往现有系统的桥梁允许不必一次性改变所有东西。

继续嘎嘎叫

我们已经通过在 DuckDB 上构建核心数据仓库功能(例如我们的 Ducklings 计算实例舰队)以及通过 Dives 和我们的 MCP 服务器等特性将 MotherDuck 扩展为一个平台,赢得了我们的荣誉。

至于 Quack 的下一步,我们计划支持 Quack 作为另一种端点类型。这将意味着你可以像连接到 Quack 服务器一样连接到 MotherDuck。我们还没有确定的时间表,但我们将争取在 DuckDB 2.0 发布时支持它。

与此同时,我们很高兴能继续发展围绕 DuckDB 的开源社区------从举办线下聚会,到教育开发者,再到撰写关于生态系统最新动态的文章。Quack 的发布对 DuckDB 用户和 DuckDB 社区来说真的是个好消息。它将让很多人能够以新的方式使用 DuckDB。我们很高兴能在 MotherDuck 支持它,并且迫不及待地想看到人们用它构建什么。

相关推荐
xugyw1 小时前
window获取安全码SHA1、SHA256和jks文件
运维·服务器·安全
肖爱Kun1 小时前
Webrtc信令交互
服务器·webrtc
杨浦老苏1 小时前
开源服务器监控工具Checkmate
运维·docker·群晖·网站监控
yyyyy_abc1 小时前
docker学习笔记
运维·docker·容器
2301_780789661 小时前
多层级 CC 防护体系:前端验证与后端限流的协同配置实践
运维·服务器·前端·网络安全·智能路由器·状态模式
秋91 小时前
Windows 环境下 Redis 部署详解:从选型、安装到生产级配置与运维
运维·windows·redis
一起逃去看海吧2 小时前
Dify-01-docker安装 和 dify部署
运维·docker·容器
林瞅瞅2 小时前
Jenkins+Docker实现Nuxt2自动化部署
服务器·ci/cd
H Journey2 小时前
Linux查看进程命令
linux·运维·进程