有一个数据库项目,每月下载次数高达数百万,仅扩展的下载流量每天就超过 4 TB 。在 GitHub 和社交媒体平台上,该数据库拥有数以万计的 Stars 和粉丝,还拥有两家以其为业务核心建立的初创公司。
这样的活力与生态发展水平,往往只有规模更大、资历更老的开源列式存储数据库才能做到。然而,这个数据库才诞生 5 年多。而最近,这个极具人气的数据库才迎来了自己的第一个大版本 1.0.0,代号“Snow Duck” (anas nivis)。不错,这就是分析型关系数据库 DuckDB。
“我们本可以在 2018 年发布 DuckDB 1.0.0,或者再等十年。从来没有一个伟大的时刻,因为软件( TeX 除外)永远没有完成的那一天。”DuckDB 联合开发者兼支持公司 DuckDB Labs 创始人 Hannes Mühleisen 说道。之所以现在发布是因为,“版本 1.0.0 对于数据管理系统来说意义重大,而不是对像鸡蛋计时器这样的应用程序(无意冒犯)。”
Mühleisen 解释称,数据管理系统(即使是纯分析系统)是任何应用程序的核心组件,因此开发人员和用户之间始终存在着一种隐含的信任契约。用户依赖数据库提供正确的查询结果,并且不会丢失数据。同时,系统开发人员需要意识到自己的责任,不能随意破坏人们的应用程序。凭借 1.0.0 版本的发布,DuckDB 已经成为一款成熟的数据库方案,并承诺采用新的数据模型与更高的稳定性以增强向下兼容能力。
据悉,团队进行了大量更改,现在已经可以保证向下兼容,而且在存储格式层面实现了一定程度的向上兼容。“如果将数据写入 DuckDB 数据库,那么这种新格式能保证用户在 10 年之后仍可正常读取该文件。这是一项意义重大的变化。”
凭什么在数据库市场“杀”出来
“自 2018 年为这个项目写下了第一段源代码,已经过去了将近六年,期间发生了很多事情:现在有超过 300,000 行 C++ 引擎代码、超过 42,000 次提交,并且有近 4,000 个问题被提出和关闭。”该项目的创建者 Mark Raasveldt 和 Hannes Mühleisen 回忆道。
DuckDB 诞生于阿姆斯特丹的 Centrum Wiskunde & Informatica 数学和理论计算研究中心,Mühleisen 在这里担任教授。2018 年,Mühleisen 和当时的 CWI 博士生 Mark Raasveldt 创建了 DuckDB。Mühleisen 想要打造一套分析数据库,其性能与 F1 赛车相当,但用户友好度却向丰田卡罗拉看齐。而当他和他的团队做起来创建这样的系统时,DuckDB 应运而生。
该项目被命名为“DuckDB”,因为创建者认为鸭子具有很强的适应能力,可以依靠任何东西生存,这与他们设想的数据库系统运行方式类似。此外,Mühleisen 还养了一只名叫 Wilbur 的宠物鸭,这也是该项目名字的灵感来源。Vectorwise 创建者 Peter Boncz 虽然未深入参与编写 DuckDB 代码库,但他也为创建者提供了宝贵的建议和见解。
从诸多方面来看,DuckDB 其实代表着典型大数据管理产品的对立面。DuckDB 的开发者并没有像其他人那样选择以分布式数据存储来处理规模化数据,而是打破了从众心理,“义无反顾”选择了单节点。作为一位一生都在学术界工作的数据库研究人员,Mühleisen 并不喜欢现代大数据管理系统给数据科学与高级分析带来的复杂性与高难度。
“我们早早就明确了不会使用分布式架构。当时每个人都在讨论将 TB 乃至 PB 级规模的数据集分派给成千上万个节点。但实际上,99% 的用户所使用的数据集其实根本达不到那样的体量。而只要不必选择分布式,那么用户体验就能大大简化。”Mühleisen 表示。
如果客户的业务达到了谷歌那样的规模,那就只能选择分布式架构以及“由此衍生的种种复杂到疯狂的方案”,比如说 MapReduce。但 Mühleisen 强调,“对我们大多数人来说,通常需要关注的数据根本达不到 PB 那个级别。相反,多数情况也就是‘这有个烦人的文件,我想读取它的内容并执行一些聚合操作’。”
DuckDB 的另一个特点就是忠于传统 SQL。虽然 NoSQL 运动仍在蓬勃发展,也有不少人希望使用 Python 和数据帧来查询数据,但 Mühleisen 及其团队意识到 SQL 并没有本质缺陷,所以并不需要被强行替代。
“我们已经无数次听到 SQL 被宣判死刑,多到我都记不清了。但我们还是决定采用 SQL,事实也证明这是个好主意,因为 SQL 的群众基础真的很广。”Mühleisen 说道。
与其他 OLAP 风格的数据库一样,DuckDB 采用列式存储(用于高效聚合)及向量化处理(用于提高性能)功能,旨在以极快的速度执行 SQL 查询。但它跟 Teradata 或者 Redshift 那种强调数据仓库属性的数据库不同,并不适合作为存放所有数据以建立“单一事实来源”的选项。其他 OLAP 数据库向右,DuckDB 向右。在功能设定上,DuckDB 更像是嵌入式分析类应用,而非大家熟悉的数据仓库。
DuckDB 体量小巧,仅有 50 MB 大,可在各种操作系统(Linux、Windows 等)上运行,并提供多种软件包,包括 Python、R 和 JavaScript 等。
前谷歌 BigQuery 工程师 Jordan Tigani 指出,DuckDB 在设计上逆数据仓库的云扩展潮流而动,而且充分考虑到以高性能笔记本电脑为运行载体。身为 DuckDB 的忠实粉丝,Tigani 与他人共同创立了 MotherDuck 公司,专门为 DuckDB 提供后端扩展。DuckDB 还有一个独门绝技,就是在有限的资源之下实现高性能分析与文件转换。
DuckDB 在设计上充分考虑分析处理,而非用于事务处理。大家没法像使用 Postgres 数据库那样在 DuckDB 中每秒处理百万行数据,但如果每秒需要读取十亿行数据,那交给它准没错。
DuckDB 在分析效率方面确实大有优势。这套数据库通常可以用单个节点取代以往需要 10 个节点组成的小型 Spark 集群。同样,当人们“将太多数据行塞进”Pandas 时,沉重的运行开销也往往会凸显出 DuckDB 的轻量化特质。
“我们有时候会自称为分析型的 SQLite。本质上讲,我们可能发明了一种新的系统类型……基本思路就是无需单独的数据库服务器,只要将 DuckDB 粘到现有应用程序之上,即可对其进行分析。”Mühleisen 表示。例如在与仪表板对接之后,这款 C++ 数据库就能在仪表板上提供毫秒级的响应时间。
Mühleisen 指出,“对于客户来说,DuckDB 的价值就是能够运行在任何你需要它运行的地方,将查询处理尽可能贴近用户,从而为用户体验提供巨大助益。”
如果用户需要进程内 OLTP 系统,Mühleisen 会建议他们考虑 SQLite。反过来,如果 SQLite 用户需要分析功能,那 Mühleisen 建议大家给 DuckDB 一个机会。
远离硅谷和风投的 18 人团队
DuckDB Labs 数据库背后的工程师团队身处阿姆斯特丹,远离永远忙碌喧嚣的美国硅谷。但千万别误以为这里技术落后——阿姆斯特丹数学与计算机科学中心正是全球最受欢迎编程语言 Python 的开发团队所在地。而且 Mühleisen 坦言,走自己的路已经成为 DuckDB 的一项独特优势。
“我认为这让我们得以做出一些非常规的选择和成果。如果身在旧金山,那我们将没有自由可言。现在我们可以忽略掉那些商业惯例,做一些我们自己认为正确的事情并真正取得成功。”另外,该公司一直在拒绝风险投资的介入。
第二家 DuckDB 初创公司、总部位于华盛顿州西雅图的 MotherDuck 开发出了 DuckDB 的无服务器版本,并得到了 Mühleisen 以及 DuckDB Labs 联合创始人兼 CTO Mark Raasveldt 的支持。尽管这家企业已经筹集到 5250 万美元,并将于今年秋季迎来 4 亿美元估值,但 DuckDB Labs 这边却一分钱也没拿。
而雇用了 DuckDB 核心贡献者的公司 DuckDB Labs 从未获得任何外部投资,因此该公司完全由团队所有。这种做法也收到了社区的欢迎,“这似乎是长期保护开源项目的绝佳结构。”有网友说道。风险投资者们当然热情伸出了橄榄枝。Mühleisen 坦言,“我们当然吸引到了不少风险投资公司的关注,各方都希望跟我们聊聊。比如 Andreessen,比如 Sequoia,但最终我们拒绝了所有风险投资方的邀约。”
这当然不是一个简单的过程。他“只是某种技术提供商”的想法并没有引起共鸣,之后 Mühleisen 与其他成熟数据库公司的人交谈后意识到,他想要更加开放、更加灵活,而且不想受某个特定应用领域的限制。
当前,实验室的业务模式是为 DuckDB 提供咨询和支持服务,该团队表示,这种方式目前进展顺利。通过合同收入,DuckDB Labs 为 18 人的团队提供长期和战略性的 DuckDB 开发资金。同时,项目中的知识产权由独立的 DuckDB 基金会持有,这个非营利性基金会确保 DuckDB 将在 MIT 许可下长期存在。
有报道称,DuckDB Labs 公司 CTO Mark 是最主力的程序员,50% 的代码是他一人完成,另外还有 13 个程序员,1 个测试实习生,1 个人负责开发者生态,1 个人负责培训与文档。
结束语
“我最近在 DuckDB 上下了很大的赌注。我已将其添加到免费 SQL 编辑器 qStudio 的核心中。现在在编辑器中,可以将任何数据库的表保存到本地 duckdb 实例,甚至可以在任何服务器之间连接。”有网友说道。随着 DuckDB 实例遍布全球,这杆独树一帜的大旗也显得愈发鲜明。Mühleisen 表示,项目的普及主要靠那些对 DuckDB 独特设计理念表示赞赏的使用者们的口口相传。
“我认为推动成功的另一个因素,就是这个领域还没有被技术方案挤满和占据。数据库市场并不是特别拥挤,我认为我们最终做出了最明智的权衡——就是毫不妥协,以一种触动人心的全新方式打造产品。”
根据 Mühleisen 介绍,美国宇航局(NASA)正将 DuckDB 引入某些应用场景(但未做明确说明),FiveTran 也将其纳入 Apache Iceberg 项目的开发流程。DuckDB 的爆红对于 Mühleisen 一说无疑是段有趣的经历。到目前为止,他的整个职业生涯都非常“单调”,就是一位踏踏实实的数据库研究员。“眼前的这一切真是太疯狂了。身为软件开发者,谁能想到自己的成果会获得如此夸张的人气和热度呢?”