来源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 社区带来什么。什么是 QuackQuack 允许你以服务器方式启动一个 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 支持它并且迫不及待地想看到人们用它构建什么。
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 社区带来什么。什么是 QuackQuack 允许你以服务器方式启动一个 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 支持它并且迫不及待地想看到人们用它构建什么。