目录
产品简介
DuckDB 是一个进程内SQL OLAP数据库管理系统,旨在实现高效的数据分析,2019年开源。它易于安装,运行速度非常快,并且可以在正在运行的进程中运行。目前,DuckDB 每周下载约 100.000 次。
产品功能
DuckDB 的主要功能是:
- 安装简单
- 嵌入式:无服务器管理
- 单文件存储格式
- 快速分析处理
- R/Python 和 RDBMS 之间的快速传输
- 不依赖任何外部状态。例如,单独的配置文件,环境变量。
- 单文件存储格式
- 可组合的界面。程序化 Fluent SQL API
- 通过 MVCC 完全 ACID
产品优势
- 简单
进程内,无服务器
C++11,无依赖,单文件构建
适用于 Python/R/Java/…的 API - 功能丰富
事务,持久性
广泛的 SQL 支持
直接 Parquet 和 CSV 查询 - 快速
矢量化引擎
针对分析进行了优化
并行查询处理 - 免费
免费和开源
许可 MIT 许可证
DuckDB 应用场景
- 处理和存储表格数据集,例如来自 CSV 或 Parquet 文件
- 交互式数据分析,例如连接和聚合多个大表
- 并发大更改,对多个大表,例如追加行,添加/删除/更新列
- 大型结果集传输到客户端
DuckDB 的模块介绍
DuckDB 的 SQL parser是从 Postgres 的 libpg_query [5]精简而来的。由于 Postgres 是 C 语言写的,通过这个 SQL parser,我们会得到一个 C 语言结构体表示的 parse tree。DuckDB 会将其转换成自己内部的 C++ 对象。
Logical planner 由 binder 和 plan generator 两部分组成。Binder 将 parse tree 与 schema 的信息(列名、类型等)绑定起来。Schema 信息保存在 catalog。Plan generator 将 parse tree 转换成一颗逻辑查询操作符(scan, filter, project 等)树。
DuckDB 实现了基于规则(rule-based)和基于代价(cost-based)的优化器。Optimizer的主要任务是优化 SQL,它将前面 logical planner 生成的 logical plan 转换成一个等价但执行代价更小的 logical plan。常见的优化方式有谓词下推(predicate pushdown)、表达式重写(expression rewriting)、调整 join 顺序(join ordering)等。
Physical planner 和 execution engine 的代码都在 execution目录下。Physical planner 将 Logical plan 转换成 physical plan。Physical plan 是一个真正可以执行的物理计划。DuckDB 实现了一个向量化(vectorized)的解释型执行引擎。向量化可以利用 CPU 提供的 SIMD 指令加速计算。DuckDB 采用 SQL 的解释执行,而没有采用 SQL 的编译执行,原因是编译执行需要依赖编译组件,比如 LLVM,这会导致 DuckDB 的体积膨胀不少。
DuckDB 支持 Serializable 的事务隔离。事务相关的代码在 transaction 目录下。
Storage 是 DuckDB 的列式存储引擎,处于整个 DuckDB 架构的最底层,负责提供数据的高效读写。
所属公司
CWI 研究人员 Hannes Mühleisen 和 Mark Raasveldt 创立了衍生公司 DuckDB Labs,为 DuckDB 提供服务和开发。2019 年,Centrum Wiskunde & Informatica (CWI) 数据库架构研究小组的研究人员 Hannes Mühleisen 和 Mark Raasveldt 发布了他们的数据库管理系统 DuckDB 的第一个开源版本。
相关资料
DuckDB官网: https://duckdb.org/
DuckDB github 开源地址:https://github.com/duckdb/