开源嵌入式分析数据库 DuckDB 迎来 2.0 重大版本预览,此次更新可以说是把“原本只适合跑在应用里做查询分析”的定位往前推了一大步:通过 Quack 打造的服务器模式将从预览走向稳定,数据库层面对触发器也实现了完整支持,同时还更换了 SQL 语法解析器和默认储存格式,整体能力更偏向“可作为数据服务来用”。
DuckDB 一直主打高效分析与易嵌入特性,设计思路接近 SQLite:开发者可以把它直接内嵌到 Python 等应用中运行,甚至无需单独部署数据库服务器。它还能直接查询 Parquet、CSV、JSON 以及 S3 上的文件数据。因此在开发者圈的关注度持续上升,虽然离传统大型数据库的使用规模仍有差距,但增长趋势明显。
在 2.0 里,最大的变化之一是服务器模式。DuckDB 今年 5 月已先行公开基于 Quack 的远端通信机制(当前仍属于预览),用户可以让某个 DuckDB 实例在网络环境中提供“数据库服务”,再由其他 DuckDB 客户端进行连接访问。更关键的是,2.0 新增了 CONNECT 指令:它不只是用来连接 DuckDB 自身,也能把 SQL 查询下发给 PostgreSQL 或 MySQL 执行,然后将结果回传给 DuckDB。也就是说,你不必为了分析而把数据表整批搬到本地,分析引擎可以更像一个“查询编排与结果处理层”。
与此同时,DuckDB 2.0 还将完整加入数据库触发器能力。触发器可以在数据新增或修改等关键操作发生前后自动触发预设逻辑,例如同步写入审计/稽核记录。新版本支持按“每一条数据”或按“每条 SQL 语句”触发,并能获取变更前后的数据内容,这对长期运行的数据库服务来说,等于补上了过去常见的变更处理与审计需求。
底层架构也做了调整:DuckDB 2.0 将更换源自 PostgreSQL 的 SQL 解析器,改用自研实现,不仅改善错误提示,还为扩展新的 SQL 语法留出空间。默认储存格式同步升级为 2.0 版本,大型索引不再必须常驻全部内存,而是按需加载,从而降低打开大规模数据时的内存压力。综合来看,DuckDB 2.0 正在把自己从“嵌入式分析工具”推向“更像通用数据库服务的角色”。