主要观点:
- DuckDB 一直秉持零外部依赖的理念,但通过扩展可以实现外部依赖,同时保持核心的可移植性和嵌入式特点。
- 介绍了处理完全禁欲(无依赖)的困难,如内联和重写代码带来的维护负担等,引出扩展的作用。
- 阐述了 DuckDB 扩展的概念、优势,如可将依赖移出核心到扩展,不同扩展可根据需求选择不同依赖程度等。
- 重点介绍了 C++的依赖管理工具 vcpkg,以及如何用 vcpkg 管理 DuckDB 扩展的依赖,以 Azure 扩展为例进行说明。
- 提供了构建自己的 DuckDB 扩展的步骤和模板,包括设置扩展模板、添加功能、编写测试等,并给出了示例扩展的相关信息。
关键信息:
- DuckDB 核心无外部依赖,但可通过扩展实现依赖。
- 处理依赖的三种方式:内联、重写、打破无依赖规则。
- DuckDB 扩展可精细控制依赖,分布为可加载二进制文件。
- vcpkg 是 C++的依赖管理工具,支持 2000 多个依赖。
- 构建自己的 DuckDB 扩展可使用 C++扩展模板,包含各种脚本和配置。
重要细节:
- Postgres 解析器和MbedTLS库内联到 DuckDB 中。
- S3 支持通过自定义 AWS S3 协议实现。
- DuckDB 扩展的一些示例如SQLite和Spatial扩展。
- Azure 扩展依赖 Azure C++SDK,在
vcpkg.json
和CMakelists.txt
中进行配置。 - 构建自己的扩展的步骤,包括安装 vcpkg、创建基于模板的仓库、添加依赖等。
- 示例扩展添加了
url_scheme
函数,并进行了测试。 - 给出相关资源如C++扩展模板、DuckDB 扩展文档、duckdb-extension-radar 仓库和Discord 服务器。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。