Open Source

DuckDB 推出 Quack 協定:內嵌資料庫補上主從架構缺口

DuckDB 釋出實驗性 Quack 遠端協定,讓 DuckDB 同時扮演 client 與 server:走 HTTP、查詢單次往返,6,000 萬列 4.94 秒傳完,正式版將隨 v2.0 於 2026 年秋季推出。

DuckDB 推出 Quack 協定:內嵌資料庫補上主從架構缺口 — 文章封面
本頁內容6 個段落
  1. Quack 是什麼
  2. 為什麼不直接用 Arrow Flight SQL
  3. 效能數字:一次往返的差距
  4. 安全模型與現階段限制
  5. 路線圖:v2.0、DuckLake 與唯讀複本
  6. 參考來源

2026 年 5 月 12 日,DuckDB 團隊發表遠端協定 Quack,讓一個 DuckDB 直接連上另一個 DuckDB:同一套軟體同時當 client 與 server,多個行程(本機或跨機器)可併發讀寫資料表而不互相鎖死。目前以實驗性擴充套件釋出,正式版隨 2026 年秋季的 v2.0 交付。

這補上長年缺口:DuckDB 從第一天就走 in-process 路線(與 SQLite 同陣營),notebook 與嵌入應用極成功,「多個行程寫同一份資料」卻無官方答案。團隊說得坦白:他們在乎使用者體驗,更勝於在架構之爭裡說最後一句話。

Quack 是什麼

Quack 直接建在 HTTP 上。訊息用新 MIME type application/duckdb,重用內部序列化原語(與 write-ahead log 同源);連線後每筆查詢只需一次往返,大結果以 fetch 訊息續傳、可跨執行緒並行。DuckDB-Wasm 原生支援,瀏覽器裡的 DuckDB 可直連 EC2 上的 server。預設 port 9494——94 是 Netscape Navigator 的推出年分。Server 以 CALL quack_serve 啟動、client 建立 secret 後 ATTACH;擴充套件 MIT 授權,放在 duckdb/duckdb-quack repo。

為什麼不直接用 Arrow Flight SQL

兩個理由。其一,Flight SQL 是外部治理的交換格式,協定演進會被別人的時程綁住。其二,它每筆查詢要兩次往返(CommandStatementQuery 加 DoGet),小交易被 round trip 拖累。團隊坦承需求早已存在:社群以自製 RPC、Flight adapter、MotherDuck 私有協定補洞,甚至用 pg_duckdb 組成「EleDucken」。

效能數字:一次往返的差距

基準在 AWS m8g.2xlarge(8 vCPU、32 GB RAM)上跑:TPC-H lineitem 傳輸 6,000 萬列,Quack 4.94 秒、Arrow Flight SQL(經 GizmoSQL)17.40 秒、PostgreSQL 158.37 秒;1,000 萬列為 0.89 對 2.90 對 25.64 秒。單列 INSERT 中位數:1 執行緒 Quack 每秒 1,038 筆、Arrow 469、PostgreSQL 839;8 執行緒為 5,434 對 1,358 對 4,320。官方口號是「把資料表塞進 socket 的最快方式」;但超過 8 執行緒後 PostgreSQL 延展性較好,卡在 DuckDB 的併發寫入限制。

安全模型與現階段限制

server 啟動時產生隨機 auth token、預設只綁 localhost;預設不開 SSL,公開暴露建議掛 nginx 反向代理加 Let’s Encrypt。驗證與授權都可覆寫:token 檢查可換自訂程式碼,授權 callback 甚至能用 SQL macro 寫(如接 LDAP)。官方明說目前是 pre-release、實驗性質,repo 的 Releases 清單還是空的。Hacker News 討論串累積 387 點。要在生產採用的團隊,先把「預設無加密」當成前提規劃網路邊界比較務實。

路線圖:v2.0、DuckLake 與唯讀複本

第一個正式版隨秋季的 DuckDB v2.0 推出,之後還有 DuckLake 整合(遠端 DuckDB 作 catalog)、auto-install、更高吞吐、可擴充訊息與唯讀複本 replication。團隊並致謝 MotherDuck 的 Boaz Leskes 與 GizmoSQL 的 Philip Moore——後者在官方之前就做出過 client-server DuckDB。下一波細節在 6 月 24 日的 DuckCon #7 公佈。

參考來源

本文由 AI 協助自上述來源整理,經人工審核後發布。

分享X電郵