Skip to content

DuckDB 简介

DuckDB是一个功能强大的列式存储的 OLAP 嵌入型数据库

架构

duckdb

典型 OLTP 例如 SQLite 是面向行的,他的物理存储以连续元组(行)作为一个存储单元:

row_storage

而 OLAP 则基于列组织的,他能够使用矢量化技术来处理数据:

column_storage

Note

尽管他的架构与传统的 RDBMS 完全不一样,但是他依然是完整的 RDBMS,他的操作依然是建立在 SQL 语句之上的。这也是 DuckDB 的一个非常重要的优势。他通过对旧有技术的扩展来更好的面向未来。

OLAP 和 OPTP

olap-optp

DuckDB 的重要的意义就是填充上图右上角的象限。相对于典型的 RDBMS 他像 SQLite 一样嵌入式、单文件以及不依赖任何外部状态。又不同于 SQLite 他传输速度更快,并且扩展了 SQL 支持组合式 SQL API:

功能 OLTP OLAP
典型场景 传统的数据存储以及为业务提供数据支持 面向数据分析
查询 查询逻辑简单,运行时间短 查询逻辑复杂,运行时间长
数据结构 数据具有严格的数据结构,通常是经过处理的结构化数据 数据来源广泛数据质量参差不齐,数据并不规范
CRUD 大量的多次小范围 CRUD 通常是只读的,单次读取数据量大
存储 数据库存储以及方法实现都是基于行的(标量) 数据库存储以及方法实现都是面向列的(向量)

Client API

DuckDB 面向各种平台和编程语言提供了特定的 Client API:

  • CLI: 跨平台的二进制文件
  • Python: DuckDB 的 Python API 绑定

数据源

DuckDB 支持从各种数据源来导入数据,并且也支持导出数据到各种数据源:

  • json: 读写 JSON 格式数据
  • duckdb: DuckDB 提供的数据库文件
  • csv: 读写 CSV 格式数据
  • parquet: 读写 parquet 格式数据
  • database: 与各种数据库进行交互

高级主题

还有一些 DuckDB 相关的高级主题: