为了账号安全,请及时绑定邮箱和手机立即绑定

DuckDB — 为什么大家都对DuckDB这么兴奋?

这是一篇我原计划在春天看到围绕DuckDB的热度开始上升时写的博客文章。从那时起,关于DuckDB的讨论在开发和数据工程社区中不断升温。如今,数据社区中有两个非常热门的趋势:DuckDB和Rust在数据工程中的崛起。那么,围绕DuckDB的热度究竟是什么呢?让我们稍微了解一下。

DuckDB Github 星标数量 随时间变化

今天数据领域的许多加速可以与过去几年中云端数据仓库的爆炸性增长趋势联系起来。云端数据仓库已经成为数据堆栈的基石:各种规模的公司和组织都使用数据仓库来支持各种分析需求。Snowflake的迅猛发展——以2020年9月破纪录的IPO结束,成为历史上规模最大的软件IPO——成为了这一趋势的典型代表。

谈到大数据的3V(速度、体量、多样性)时,在最近几年里,速度这一维度最受重视。

正如梅迪·乌扎扎(Mehdi Ouazza,Trade Republic的Staff Data工程师)所指出的——事实是,并不是每个人都有真正意义上的“大数据”——从你的OLTP数据库中处理的数据资产中,低延迟地消费这些数据是使用微服务的一个常见场景。

正如Mehdi所说那样,如果我们看看一些产品趋势(RocksDB,DuckDB,Clickhouse),它们都提供了更简单的低延迟消费界面。甚至一些云数据仓库的巨头已经在这些应用上进行了投资,比如Snowflake Unistore

然而,目前的云数据仓库模式仍然偏向于客户端-服务器架构,忽视了日益增长的非客户端-服务器用户需求。正如红点创投的投资人 Tomasz Tunguz 所说的:

“大多数工作负载并不庞大。与其需要扩展到天空中的数据库,数据分析在你的电脑上运行一个优化的数据库会更快捷,这个数据库可以在需要时利用云端资源。”

DuckDB 正在改变这一切。

关于“DuckDB”的谷歌搜索趋势数据

从上述 Google Trends 数据可以看出,在最近几个月里,数据领域关于 DuckDB 的讨论和热议逐渐升温。

日益增长的势头

DuckDB的增长势头只需从社交媒体上的帖子中就能看出。例如,Robert Sahlin(MatHem的数据工程负责人)在今年七月的 LinkedIn 上这样提到:

“我最近听到了很多关于DuckDB的好消息,还听了乔丹·蒂加尼(MotherDuck和BigQuery名人)和汉内斯·穆勒森(DuckDB Labs的创始人)的播客,觉得非常不错。因此我决定尝试一下。我写的第一个程序是直接从BigQuery表读取数据以创建DuckDB表,使用的是BigQuery存储读取API,因为它支持Arrow表。结果非常简单,我已经分享到一个gist上。我迫不及待地想用DuckDB尝试更多,并处理更大规模的数据,它确实潜力巨大。”

罗伯特肯定不是唯一对DuckDB感到兴奋的人,特别是看了社交媒体上的帖子之后。我建议你只需在LinkedIn或Twitter上搜索#duckdb话题。例如,阿比舍克·乔杜哈里(拜耳的高级数据工程师)最近在LinkedIn上发帖写道:

“我认为数据工程/数据科学领域中最令人兴奋的新技术之一是DuckDB。DuckDB的速度惊人,尤其是与Apache Arrow配合使用时,能够提供令人惊叹的结果。DuckDB的另一个重要特点是它非常简单。它不标榜任何突破性的创新,而是专注于提供简单、快速的数据访问。”

不过,我最喜欢关于DuckDB的社交媒体评论可能是由Josh Wills在一条Twitter帖子中所做,这条帖子讨论了Benn Stancil写的博客文章“Snowflake如何失败”(我推荐订阅他的Substack)。

请看下面展示DuckDB目前在数据社区中激发兴趣的一些推文截图:

图片来源:Madrona

基于DuckDB的托管解决方案搭建

这是一个相当经典的模式——利用展示出势头的开源工具来构建其上的服务。例如,Databricks 就这样做了 Spark,Confluent 也对 Kafka 如此操作。

Jordan Tigan,曾是 Google BigQuery 的长期产品领导者(正如 Robert Sahlin 之前所提到的,BigQuery 的一位知名人物),在五月宣布将与人共同创立一个名为 MotherDuck 的无服务器云版本的 DuckDB。他将与他的 Google 同事 Tino Tereshko 一起加入该项目。

除了MotherDuck之外,我们还有DuckDB Labs,这是一个由Hannes Mühleisen以及其他DuckDB的创建者于2021年7月成立的商业公司,以提供支持、定制扩展,甚至定制版本的产品,以此来实现盈利。

正如劳伦·巴利克在其博客文章中提到的 —— 风险投资家和数据专家确有理由蜂拥而至DuckDB。

昨天,MotherDuck 公司宣布了他们的$47.5M融资轮,由例如 a16z(Databricks 的早期投资者)和 Redpoint Ventures(Snowflake 的早期投资者)领投。MotherDuck 和 DuckDB Labs 同时宣布了与 DuckDB Labs 的战略合作

MotherDuck 的联合创始人乔丹·蒂加尼在宣布此轮融资消息时如是说道:

“用户希望快速得到答案——他们不想等待云服务……实际上,现在的笔记本电脑比现代的数据仓库还要快。云数据供应商专注于处理100TB数据查询的能力,这不仅对大多数用户来说无关紧要,还分散了提供出色用户体验的注意力。”

但这究竟是怎么回事?咱们稍微扒一扒。

DuckDB 是一个易于使用的开源嵌入式 OLAP 数据库(无需专用服务器或服务即可在内存中处理数据)——很多人简单地说,它就像是分析 OLAP 工作负载中的 SQLite。

在 HackerNoon 上,它被描述为“SQLite 和 Redshift 的怪胎结合体”。

MotherDuck团队所述,作为一个嵌入式数据库,DuckDB是一个存储和计算引擎,可让开发人员、数据科学家、数据工程师和数据分析师使用简单的SQL进行极其快速的数据分析。此外,DuckDB有能力在数据所在的地方进行分析,例如,在笔记本电脑或云端。此外,DuckDB自带一个简单的CLI,用于快速原型开发的工具——无需设置、权限设置、创建和管理表格等。

根据在如 HackerNews、Reddit 和 Twitter 等平台上的讨论,DuckDB 看起来有很多值得喜欢的地方,比如:

  • 它在单节点机器上处理分析任务的性能似乎令人印象深刻,并且安装起来非常简单(您可以技术上在5分钟内开始探索DuckDB)。
  • DuckDB 可嵌入(类似于 SQLite),并且针对分析进行了优化。关键在于可嵌入的部分(像一个库而没有引入典型的 PostgreSQL 依赖),消除了通常会遇到的网络延迟。
  • DuckDB 的部署工作量也非常小——只需执行 pip install duckdb 就可以开始使用。
  • 此外,DuckDB 运行速度非常快——与查询操作 Postgres 相比,DuckDB 快80倍,举例来说,在与其他系统的基准测试中,我们也可以看到 类似令人印象深刻的结果

这些都是最近一年DuckDB 增长令人印象深刻的一些原因。

在实践中,任何 CPU 都可以被用来通过 DuckDB 进行强大的分析。此外,DuckDB 是便携和模块化的,不依赖任何外部组件。具体来说,这意味着你可以在云虚拟机、云函数、浏览器或在你的笔记本电脑上运行 DuckDB,正如之前提到的。

让我们稍微退一步看看

在下面的部分中,我很大程度上参考了Kojo Osei(Matrix Partners的投资人)在六月写的一篇关于DuckDB的文章,这篇文章很棒。

正如 Kojo 所提到的,一类正在兴起的数据仓库位于分析查询和嵌入式部署的交汇点。为了说明这是多么有吸引力,他根据两个维度来分类数据库。

数据库工作负载的类型(图片来源:Kojo Osei

如上所示,并由Kojo指出,当前的数据库针对分析型或事务型工作负载进行了优化。分析型工作负载,也称为在线分析处理(OLAP),涉及对历史数据的复杂查询。例如,您可能希望根据如年龄和位置等人口统计信息来分析用户注册情况。相比之下,事务型工作负载,也称为在线事务处理(OLTP),则优化了快速的实时读写操作。

我们继续看看部署类型。

数据库部署方式(图片来源:科佐·奥西 Kojo Osei

正如Kojo所指出的,当前的数据库技术被部署成独立或嵌入式解决方案。独立数据库通常以客户端-服务器模式部署。数据库位于中央服务器上,并通过客户端应用程序进行查询。嵌入式数据库则直接运行在访问它的应用程序的宿主进程中。

现在来点魔法。当我们合并这两个轴时,我们可以看到一个创新缺口!正如 Kojo 所指出的,目前 OLAP 数据库的创新主要集中在独立的 OLAP 数据库,如 Snowflake、ClickHouse 和 Redshift(不知道为什么他没有提到 BigQuery)。这导致嵌入式分析用例被忽视,服务不足。DuckDB 正在改变这种状况。

图片来源:Kojo Osei

DuckDB(鸭子数据库)的应用场景

Airbyte 在其术语表中的 DuckDB 条目 中提供了一个简短说明:

  • 超快速的分析用例可以在本地运行。例如,在Airbyte术语表中的出租车示例包括一个10年,15亿行的出租车数据集,仍然可以在笔记本电脑上运行。详情请见这里的基准测试。
  • 可以用作SQL包装器,基于S3中的Parquet文件,实现零复制。
  • 直接将数据带给用户,避免通过REST API进行的大范围数据往返和延迟。相反,您可以在客户端存放数据,这样每秒可以处理60帧的数据,因为数据就在查询的地方。
  • 在Kubernetes上的DuckDB可以为读取数据湖中的S3提供零复制层!灵感来自这条推文。这是开始使用最便宜和最快的方式。

根据文档,应使用DuckDB的情况有:

  • 处理和存储来自 CSV 或 Parquet 文件的表格数据集
  • 进行互动数据分析,例如连接和聚合多个大表格
  • 对多个大表格进行并发的大规模修改,例如追加行,添加、删除或更新列
  • 将大规模的结果集传输给客户端

根据官方文档,这里有一些情况你可能不想用DuckDB:

  • 拥有高吞吐量的事务性用例(例如,跟踪电子商务订单)
  • 多个并发进程向单个数据库写入数据
  • 拥有大型客户端/服务器部署,用于集中式企业数据仓库系统

想了解更多关于DuckDB的应用场景,可以听听在播客《数据工程播客》第270集,其中一位嘉宾是Hannes Mühleisen,他是DuckDB的主要创作者之一,讨论大约从14分钟开始。

最后

市面上有很多数据库管理系统。但正如DuckDB的创建者在其网站上提到的(https://duckdb.org/why_duckdb):没有一种适合所有情况的数据库系统。所有系统都采取不同的折衷以适应特定使用场景。DuckDB也不例外,它也采取了不同的折衷方案

当你为你的项目选择一个数据库引擎时,你通常会考虑那些更适合多并发用户需求的选项。有时候,你真正需要的是一个嵌入式数据库,在单用户工作负载下表现极快。这就是DuckDB,它来了!

此外,DuckDB还允许整个SQL爱好者社区立即高效参与Python编程而无需学习超出仅限于非常基础的Pandas知识。这使得越来越多的数据社区成员不再使用Pandas来完成任何复杂任务,因为他们更偏向于使用SQL。

路易斯·瓦莱斯科(Luis Velasco,谷歌的数据解决方案负责人)在几个月前的领英上很好地总结了他为什么认为DuckDB是个大事情:

1. 我们正生活在中央数据平台大解构的时代。我所能想到的计算去中心化的最极端情况是一个由笔记本电脑组成的网格。像 parquet 和 pyarrow 这样的技术,结合了向量化执行,使得在个人设备上查询大规模数据集更高效。

2. 隨著數據素養的提高和編程技能的提升,洞察消費不再是靜態的——如儀錶板——而是更具探索性和自助式的。因此,我想象數據分析師可以訪問存儲在雲端的數據,並使用duckDB進行本地嵌入式分析。

3. SQL 活力更胜以往,这一点毫无疑问。

4. 无需部署 — 只需运行 pip install duckdb 即可使用,简单又快捷

5. 开源 — 一个活跃的社区正在形成,得到了如 pandas、dbt 或 apachesuperset 等关键组件的支持,更别提新兴的创业公司如 DuckDB Labs 和 MotherDuck 了

你觉得DuckDB的未来会怎么样?

PS:我推荐观看The Seattle Data Guy发布的这个“什么是DuckDB”的视频,他在视频里和Joseph Machado(在LinkedIn的资深数据工程师)一起讨论了DuckDB如何震撼数据界。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消