v2.0 预览版正式亮相
DuckDB Labs 发布了这款开源分析引擎 v2.0 的官方预览版,代号为“Cyanoptera”。该版本距离 1.5 版本已经积累了超过 10000 次提交,是架构上的一次重大演进。过去,该引擎以快速、嵌入式、进程内列式数据库建立了声誉,而 v2.0 在不牺牲单一二进制文件简洁性的前提下,把运行范围扩展到了分布式拓扑,同时稳定了插件生态系统。正式版本计划在秋季发布。
这次发布最核心的变化,是由 quack 协议扩展和新的 CONNECT SQL 语句支持的原生客户端/服务器模式。开发者不再需要把引擎直接嵌入应用程序,也不用依赖冗长的查询封装器。现在任何实例都可以作为守护进程运行,并通过网络接受连接。用户可以挂载远程端点,或者挂载 PostgreSQL、MySQL 等外部关系数据库引擎,通过下推优化直接路由查询。
网络层与多租户部署能力
新的网络层依赖底层多版本并发控制(MVCC)和多连接事务隔离。为了支持长期运行的多租户服务器部署,这次发布还重新设计了可观测性和指标子系统。从使用方式看,开发者可以通过 CALL quack_serve 启动服务,再用 ATTACH 挂载远程端点,然后 CONNECT 连接、执行查询、DISCONNECT 断开,整个流程已经比较完整。
扩展可移植性全面改造
扩展可移植性的改造对生态系统同样意义重大。此前,扩展需要针对不稳定的内部 C++ API 进行编译,开发者被迫为每个版本重新构建二进制文件。2.0 版本引入了版本化 C API,提供明确的 YAML 定义规范和稳定的应用程序二进制接口(ABI)保证。高级 C++ 抽象层和即将推出的 Rust 绑定,让开发者能够一次构建扩展,并在多个次要版本和补丁版本中运行。
此外,组织不再受限于官方仓库。v2.0 允许团队定义、通过加密方式固定并自行托管自定义扩展仓库。具体操作包括设置允许的扩展仓库、创建私有仓库、从私有仓库安装扩展,以及加载私有仓库中的扩展。这意味着企业可以把扩展管理纳入自己的基础设施控制范围。
VARIANT 类型与解析器更新
除了服务器能力和扩展管理之外,这次发布还让 VARIANT 类型完全成熟。引擎现在可以检测半结构化模式,并将类似 JSON 的载荷从磁盘到 Parquet 分解为列式表示,从而无需显式模式即可扫描嵌套字段。对于经常处理半结构化数据的团队来说,这个变化减少了模式定义的前置成本。
这款分析引擎还用自定义的、基于 PEG 的语法取代了此前源自 PostgreSQL 的解析器,允许扩展注册自定义 SQL 语法,同时为诊断提供准确的源代码位置。其他新增 SQL 功能包括带有转换表的原生 BEFORE 和 AFTER 触发器、面向向量工作负载的 APPROX NEAREST 相似度联接,以及通用表表达式(CTE)内部的 DML 表达式。
性能与存储格式改进
引擎性能也获得了提升,包括跨 Amazon S3 等云对象存储的异步 I/O、感知分区的查询规划,以及通过默认 DICT_FSST 字典实现的优化字符串压缩。v2.0 存储格式为自适应基数树(ART)索引引入了延迟列元数据加载和增量检查点空间回收。
此外,该引擎已解除对外部 ICU 的依赖,转而使用一个紧凑的、由 IANA 支持的原生子系统处理时区和排序规则逻辑,在减小二进制文件体积的同时加快时间转换。
社区反馈:运维优势与生态取舍
Hacker News 和 Reddit 上的社区讨论显示,开发者对 v2.0 表现出强烈兴趣,讨论重点集中在实际运维优势和生态系统取舍上。在 Hacker News 上,从业者称赞该引擎能够在消费级硬件上执行核外、超出内存容量的分析工作负载,从而大幅降低云基础设施成本。
多位工程师重点介绍了如何使用 DuckDB-WASM 和 Parquet 直接驱动浏览器内仪表板,而不需要后端 REST 层;另一些人则欢迎新的异步 I/O 引擎,认为它能够有效地处理 HTTP 查询流量并运行实时事件流管线。
在与 SQLite 的比较中,评论者强调,该引擎丰富的类型系统和专用列式引擎是长期数据分析的关键优势。与此同时,在 Reddit 的 r/programming 板块,讨论集中在阐明它对 Web 应用程序开发者而言所扮演的架构角色。用户强调,该引擎并非 PostgreSQL 的事务型 OLTP 替代品,而是一个敏捷、轻量的 OLAP 主选项。
热门跟贴