DuckDB需要安装CMake和兼容C++11的编译器。GCC 4.9及更高版本、Clang3.9及更高版本和VisualStudio2017在每个版本上都进行了测试。
在根目录中运行make来编译源代码。对于开发,请使用make debug生成非优化的调试版本。您可以运行make unit和make all unit来验证您的版本在进行更改后是否正常工作。
可以在build/release/duckdb_cli(发布,缺省设置)或build/debug/duckdb_cli(调试)中找到基于sqlite3的命令行实用程序。
由于DuckDB是嵌入式数据库,因此不需要启动数据库服务器,也不需要客户端连接到正在运行的服务器。但是,可以使用C或C++绑定将数据库服务器直接嵌入到应用程序中。主构建过程创建可以链接到的共享库build/release/src/libduckdb.[so|dylib|dll]。还构建了一个静态库。
duckdb是用C++11实现的,应该用GCC和clang编译,用cmake构建,catch2测试。DuckDB使用来自各种开源数据库的一些组件,并从科学出版物中获得灵感。以下是概述:
解析器:我们使用重新打包为独立库的PostgreSQL解析器。到我们自己的解析树的翻译受到了peloton的启发。
SQL窗口函数:DuckDB的窗口函数实现使用段树聚合,如Viktor Leis、Kan Kundhikanjana、Alfons Kemper和Thomas Neumann所著的“Analytical SQL Queries中的窗口函数的高效处理”一文中所述。
执行引擎:矢量化执行引擎的灵感来自Peter Boncz、Marcin Zukowski和Niels Nes的论文“MonetDB/X100:Hyperper-Pipeline Query Execution”(MonetDB/X100:超级流水线查询执行)。
优化器:DuckDB的优化器灵感来自Guido Moerkotte和Thomas Neumman的“动态编程反击”(Dynamic Programming Retriback)以及托马斯·诺伊曼(Thomas Neumann)和阿尔芬斯·坎珀(Alfons Kemper)的“解嵌任意查询”。
并发控制:我们的MVCC实现灵感来自于Thomas Neumann、Tobias Mühlbauer和Alfons Kemper的论文《Main-Memory Database Systems的快速可序列化多版本并发控制》(Fast Serializable Multi-Version Concurrent Control for Main-Memory Database Systems)。