正文
我们需要一个能够嵌入到应用中,同时又快速且可靠的数据库系统。SQLite 和 DuckDB 都可以满足这些要求,但我们发现 DuckDB 在执行分析查询时比 SQLite 快 3 到 5 倍,而且随着数据量的增加,这种优势更加明显。
我们最复杂的查询涉及多个大表和视图的连接,并且大量依赖聚合 SQL 函数。在这种工作负载下,DuckDB 在这方面超越了 SQLite 也就不足为奇了。
DuckDB 的文档写道:
DuckDB 是为支持分析查询工作负载(即在线分析处理,OLAP)而设计的。
为了高效地支持这种工作负载,缩短每个单独值所消耗的 CPU 时间至关重要。在数据管理领域,实现这一目标的最新技术是矢量化或即时查询执行引擎。DuckDB 使用了列存储矢量化查询执行引擎。虽然查询仍为解释执行,但会一次性处理大量值(一个“向量”)。这大大降低了传统系统(如 PostgreSQL、MySQL 或 SQLite)中逐行处理数据的开销。矢量化查询执行在 OLAP 查询中表现出更好的性能。
SQLite 逐行处理数据,而 DuckDB 使用列存储矢量化执行引擎,同时处理大量值。这种处理方式特别适合我们的分析工作负载。
ClickBench 基准测试显示,在某些分析查询中,DuckDB 的性能比 SQLite 快了多达 1200 倍。