DuckDB:一个可嵌入的分析型数据库
作者:Mark Raasveldt (m.raasveldt@cwi.nl) 和 Hannes Mühleisen (hannes@cwi.nl)
单位:CWI, 阿姆斯特丹
摘要:SQLite的巨大成功表明,人们需要一种不引人注目的进程内数据管理解决方案。然而,目前还没有针对分析型工作负载的此类系统。我们展示了DuckDB,这是一个新型的数据管理系统,旨在嵌入到其他进程中执行分析型SQL查询。在我们的演示中,我们将DuckDB与其他数据管理解决方案进行对比,以展示其在嵌入式分析场景中的性能。DuckDB作为开源软件,采用许可性许可证发布。
ACM参考格式:Mark Raasveldt 和 Hannes Mühleisen. 2019. DuckDB: an Embeddable Analytical Database. In 2019 International Conference on Management of Data (SIGMOD ’19), June 30-July 5, 2019, Amsterdam, Netherlands. ACM, New York, NY, USA, 4 pages. https://doi.org/10.1145/3299869.3320212
1. 引言
数据管理系统已经演变为大型单体数据库服务器,作为独立进程运行。这在一定程度上是为了满足同时为多个客户端提供服务的需求,部分是由于数据完整性要求。尽管功能强大,但独立系统需要相当大的努力才能正确设置,数据访问受到其客户端协议的限制。数据管理系统还有一个完全不同的用例,即嵌入到其他进程中的系统,数据库系统是一个链接库,完全在“宿主”进程中运行。这类系统中最著名的代表是SQLite,它是部署最广泛的SQL数据库引擎,拥有超过一万亿个活跃数据库。SQLite专注于事务性(OLTP)工作负载,包含一个基于B树存储格式的行优先执行引擎。因此,SQLite在分析型(OLAP)工作负载上的性能非常差。

图1:系统全景
嵌入式分析数据管理系统的需求显而易见,这一需求主要来自两个方面:交互式数据分析和“边缘”计算。交互式数据分析使用R或Python等工具进行。这些环境中通过扩展(如dplyr、Pandas等)提供的基本数据管理操作符与SQL查询中堆叠的关系操作符非常相似,但缺乏完整的查询优化和事务性存储。嵌入式分析数据管理系统也适用于边缘计算场景。例如,目前的智能电表会将数据转发到中央位置进行分析。这在带宽有限的无线电接口上存在问题,同时也引发了隐私问题。可嵌入的分析数据库非常适合支持这种用例,数据可以在边缘节点上进行分析。交互式分析和边缘计算这两个用例看似正交,但令人惊讶的是,不同的用例产生了相似的需求。例如,在这两种用例中,便携性和资源需求都是关键,对这两者都谨慎的系统将在两种使用场景中表现良好。
在我们之前的研究中,我们开发了MonetDBLite,这是一个从MonetDB系统派生的嵌入式分析系统。MonetDBLite成功地证明了嵌入式分析确实存在需求,它每月有数千次下载,并在全球范围内被使用,从荷兰中央银行到新西兰警察。然而,它的成功也暴露了在非专用系统中难以解决的几个问题。我们为嵌入式分析数据库确定了以下需求:
- 对OLAP工作负载具有高效率,但

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



