DuckDB,是一个可嵌入的 SQL OLAP 数据库管理系统。
因为 DuckDB 是一个嵌入式数据库,所以没有要启动的数据库服务器或连接到正在运行的服务器的客户端。但是,可以使用 C 或 C++ 绑定将数据库服务器直接嵌入到应用程序中。
DuckDB 是在 C++11 中实现的,应该用 GCC 和 clang 编译,使用 CMake 构建和 Catch 2 进行测试。此外,还可以使用 Jenkins 作为 CI 平台,DuckDB 也使用了各种开源数据库中的一些组件。
特点
- 语法解析:使用 PostgreSQL 解析器,该解析器被重新打包为独立库
- shell:对 SQLite shell 进行了调整,以使用 DuckDB
- 测试:使用 SQLite 中的 SQL 逻辑测试来测试 DuckDB
- 模糊查询:使用 SQLsmith 生成随机查询以进行额外的测试
- Date Math:使用 MonetDB 中的 Date Math 组件
- SQL 窗口函数:DuckDB 的窗口函数实现使用分段树聚合,如 Viktor Leis、KanKundhikanjana、Alfons Kemper 和 Thomas Neumann
- 执行引擎:矢量化执行引擎的灵感来源于 PeterBoncz、Marcin Zukowski 和 Niels nes 的论文 “MonetDB/X 100:超级流水线查询执行”
- 优化器:DuckDB 的优化器从 Guido Moerkotte 和 Thomas Neumman 的论文 “动态规划回击” 以及 Thomas Neumann 和 Alfons Kemper 的“取消任意查询嵌套”中获得灵感
- 并发控制:我们的 MVCC 实现灵感来自于 Thomas Neumann,Tobias Mühlbauer 和 Alfons Kemper 的论文“用于主存数据库系统的快速序列化多版本并发控制”
- 存储:DuckDB 使用 DataBlock 作为持久存储,如 Harald lang、Tobias Mühlbauer、Florian Funke、Peter Boncz、Thomas Neumann 和 Alfons Kemper 在“数据块:利用矢量化和编译的压缩存储上的混合 OLTP和OLAP” 中描述的那样
- 正则表达式:DuckDB 使用 Google 的 RE2 正则表达式引擎
评论