DuckDB 简介
DuckDB是一个功能强大的列式存储的 OLAP 嵌入型数据库。
架构
典型 OLTP 例如 SQLite 是面向行的,他的物理存储以连续元组(行)作为一个存储单元:
而 OLAP 则基于列组织的,他能够使用矢量化技术来处理数据:
Note
尽管他的架构与传统的 RDBMS 完全不一样,但是他依然是完整的 RDBMS,他的操作依然是建立在 SQL 语句之上的。这也是 DuckDB 的一个非常重要的优势。他通过对旧有技术的扩展来更好的面向未来。
OLAP 和 OPTP
DuckDB 的重要的意义就是填充上图右上角的象限。相对于典型的 RDBMS 他像 SQLite 一样嵌入式、单文件以及不依赖任何外部状态。又不同于 SQLite 他传输速度更快,并且扩展了 SQL 支持组合式 SQL API:
功能 | OLTP | OLAP |
---|---|---|
典型场景 | 传统的数据存储以及为业务提供数据支持 | 面向数据分析 |
查询 | 查询逻辑简单,运行时间短 | 查询逻辑复杂,运行时间长 |
数据结构 | 数据具有严格的数据结构,通常是经过处理的结构化数据 | 数据来源广泛数据质量参差不齐,数据并不规范 |
CRUD | 大量的多次小范围 CRUD | 通常是只读的,单次读取数据量大 |
存储 | 数据库存储以及方法实现都是基于行的(标量) | 数据库存储以及方法实现都是面向列的(向量) |
Client API
DuckDB 面向各种平台和编程语言提供了特定的 Client API:
数据源
DuckDB 支持从各种数据源来导入数据,并且也支持导出数据到各种数据源:
- json: 读写 JSON 格式数据
- duckdb: DuckDB 提供的数据库文件
- csv: 读写 CSV 格式数据
- parquet: 读写 parquet 格式数据
- database: 与各种数据库进行交互
高级主题
还有一些 DuckDB 相关的高级主题:
- DuckDB 并发模型: 介绍在并发编程中如何使用 DuckDB