当前位置: 首页 > news >正文

DuckDB发布Quack协议:多用户体验升级,性能远超传统协议!

Quack:DuckDB客户端 - 服务器协议

现在DuckDB实例可以使用Quack远程协议相互通信,能在客户端 - 服务器模式下运行,支持多个并发写入器。Quack设置简单,基于HTTP等成熟技术构建,速度快,可支持各种工作负载。

背景:数据库架构

数据库刚出现时,“客户端”和“服务器”未明确区分,整个数据库在一台计算机上运行。20世纪80年代,Sybase首次引入数据库“服务器”和“客户端”在不同计算机上运行的概念,此后客户端 - 服务器架构成为默认选择,但这种协议有大量开销。也有人反对该架构,如SQLite和DuckDB强调进程内架构,在交互式用例中效果好,但在多进程修改同一数据库文件时表现不佳。不过,也有一些解决办法,如创建自定义RPC解决方案、使用Arrow Flight SQL协议等。

介绍DuckDB的Quack协议

将DuckDB实例之间的通信协议命名为“Quack”。用户使用时,需两个DuckDB实例,可位于不同计算机或同一笔记本的不同终端窗口,要在两个实例中安装Quack扩展。通过示例展示了如何使用Quack协议进行数据交互,还可使用query函数发送复杂查询。更多详细信息可查阅文档。

协议设计

基于HTTP

Quack构建在HTTP之上,HTTP开销低,便于处理,还允许DuckDB - Wasm发行版直接使用Quack。

请求 - 响应模式

Quack上的交互由客户端以请求 - 响应模式驱动,消息包括连接请求、执行查询请求等。

序列化

请求和响应使用新的MIME类型“application/duckdb”编码,利用DuckDB内部高效的序列化原语。

加密

Quack默认生成随机身份验证令牌,服务器默认绑定本地主机,默认不使用SSL。不建议直接将端点暴露到互联网,建议使用常见HTTP端点并终止SSL。相关指南可在文档中查看。

往返次数

精心优化查询的协议往返次数,连接成功后一个查询可一次往返处理,且对批量响应传输进行了优化,是传输表的最快方式之一。

身份验证和授权

数据库查询的身份验证和授权复杂,Quack选择与DuckDB可扩展性理念契合的认证模型。自带默认身份验证方法和无授权限制,均可通过用户代码覆盖。

默认端口

Quack服务器默认监听端口9494。

基准测试

批量传输

在AWS Arm虚拟机上进行批量传输基准测试,将Quack与PostgreSQL协议和Arrow Flight SQL协议比较。结果显示,Quack在批量结果集传输方面表现出色,能在不到5秒内传输6000万行,远超其他协议。

小写入

进行小批量追加操作基准测试,发现Quack在最多8个并行线程时,每秒事务率最高可达约5500次,超过PostgreSQL。但之后遇到DuckDB自身并发插入限制,PostgreSQL扩展性更好。Arrow Flight表现不佳。

结论

用例

Quack为DuckDB带来完整多用户体验,可在更多新用例中发挥作用,还将集成到DuckLake中,带来新功能。有疑问可查阅Quack常见问题解答。

下一步计划

将Quack集成到DuckLake中,完善Quack并在DuckDB v2.0发布时推出首个生产版本。计划自动安装和加载Quack扩展,改进通信语法,提高每秒事务数。还考虑对协议进行扩展,添加复制协议。可参加DuckCon #7了解更多信息。

致谢

感谢MotherDuck的Boaz Leskes分享经验教训,感谢GizmoSQL / GizmoData的Philip Moore证明DuckDB客户端 - 服务器模式的价值。

附录:为什么不使用Arrow Flight SQL?

认可Arrow及相关项目价值,但担心在DuckDB内部使用Arrow交换格式受限,Quack使用自己的序列化方式。而且Arrow Flight SQL每个查询至少需两次协议往返,不适合小更新操作,Quack可实现单次往返查询执行和结果获取。

http://www.jsqmd.com/news/814041/

相关文章:

  • CodeWarrior 10.7调试秘籍:除了断点,你更应该掌握这几种查看内存和寄存器的高效方法
  • 深⼊理解指针(3)
  • 3分钟掌握NCM解密:网易云音乐文件快速转换终极指南
  • Next.js全栈认证方案:基于Auth.js的JWT与数据库会话策略详解
  • Halcon局部阈值分割避坑指南:dyn_threshold与var_threshold到底怎么选?
  • 3步解锁网易云音乐NCM格式:Windows图形化解密工具终极指南
  • 华硕笔记本终极性能控制指南:3分钟学会用G-Helper告别臃肿奥创中心
  • 5分钟掌握猫抓浏览器扩展:免费视频下载和媒体嗅探终极指南
  • 如何用 writable 属性描述符限制 JavaScript 对象属性修改.txt
  • 打破物理限制:如何用ParsecVDisplay创建多达16个虚拟显示器?
  • 别再只调参了!从LR到DIN,手把手拆解主流CTR模型的核心思想与演进脉络
  • 嘉兴看牙哪家靠谱?2026年本地6家口腔机构实测排行榜(纯生活体验版)
  • ARM独占加载指令LDREXD与LDREXH详解
  • 快速上手Linux环境下Nginx的安装和配置
  • 软件测试的职业天花板:隐形的壁垒与真实的困境
  • 深入解析Parsec虚拟显示器驱动:构建高性能游戏串流显示方案
  • Elsevier Tracker:终极自动化学术投稿进度管理方案
  • 全球首款量产载人变形机甲,硬核科技颠覆出行想象
  • 稀疏网格与HDMR技术在高维经济模型求解中的应用
  • 3个专业技巧:快速掌握Equalizer APO音效调校完全指南
  • 氛围驱动开发:量化开发者状态,打造自适应智能编程环境
  • 2026 Java面试通关核心:1000+道最新面试题与标准答案(建议收藏)
  • 如何将联系人从一个 Apple ID 转移到另一个?
  • Windows 11更新后TranslucentTB无法启动的终极解决方案
  • AI赋能需求工程:从模糊需求到清晰蓝图的结构化方法
  • LLM在Verilog代码生成与性能预测中的突破应用
  • 量子比特读取技术:KLiNQ架构与FPGA优化实践
  • 计网实验一
  • 利用Taotoken模型广场为不同业务场景快速选型合适模型
  • 如何5分钟搞定跨平台远程桌面控制:BilldDesk Pro完全指南