DuckDB 用户调查分析
作者:Gabor Szarnyas
原文:https://duckdb.org/2024/10/04/duckdb-user-survey-analysis.html

我们分享了来自 500 多名 DuckDB 用户的调查结果。
今年早些时候,我们在 DuckDB 社区开展了一项调查,主要想了解以下几个问题:
1. 用户是如何使用 DuckDB 的?
2. 他们在什么环境中使用 DuckDB?
3. 用户对 DuckDB 的哪些功能特别满意?
4. 他们希望在未来的版本中看到哪些改进?
这次调查持续了约三周时间,超过 500 名用户提交了他们的回答。作为感谢,我们在参与者中抽取了 20 名幸运者,送出了 T 恤和连帽衫作为奖励。
总结
我们将此次调查的主要发现总结如下:
• DuckDB 最常在笔记本电脑上运行,但服务器上的使用也相当普遍。
• 最受欢迎的客户端是 Python API 和独立的命令行工具(CLI)。
• 虽然大多数用户处理的不是超大数据集,但他们非常看重 DuckDB 的高性能。
• 用户希望 DuckDB 能在处理时间序列和分区数据时,进一步提升性能表现。
• DuckDB 在数据工程师、分析师和科学家群体中备受青睐,同时也吸引了许多软件工程师的关注。
接下来,让我们深入了解这些发现的细节!
使用 DuckDB
使用环境
我们询问了用户关于 DuckDB 部署环境的情况,发现大多数用户(87%)是在笔记本电脑上运行 DuckDB。这与 DuckDB 的初衷一致——充分利用现代终端设备的硬件能力。29% 的用户在台式工作站上使用它,而 58% 的用户则在服务器上运行(具体详情见服务器类型
部分)。

客户端工具
根据调查,DuckDB 最常通过 Python 使用(73%),这与 Python 语言的流行度[1]相吻合。接下来是 独立命令行工具[2](47%)。
第三名的竞争尤为激烈,R、WebAssembly 和 Java 各占大约 14%,Node.js (Javascript) 则占 9%。

此外,还有 ODBC、Rust 和 Go 各占 6-7%,而 Arrow (ADBC) 以 5% 的使用率排在前十名的末尾。
操作系统
大多数用户(61%)在 Linux 服务器上运行 DuckDB,这些包括云服务器、本地安装和持续集成(CI)环境。Windows 桌面和 macOS 用户的比例相近,各占 41-45%。还有 9% 的用户在 Windows 服务器上运行 DuckDB。

Linux 桌面的用户比例相当高,约为 29%。要知道,虽然 Linux 桌面市场份额[3] 仅有 4.5%,但这一比例的 DuckDB 用户表明,DuckDB 在数据工程师群体中广受欢迎。这些用户常常选择 Linux 桌面环境,因为它具备高度的定制性,并且与 Linux 服务器部署环境相似。
服务器类型
如前所述,DuckDB 经常在服务器上运行。那么这些服务器的配置如何呢?根据用户反馈,56% 的用户在小型服务器(少于 16 GB 内存)上运行 DuckDB,61% 的用户使用中型服务器(16-512 GB 内存)。另外,14% 的用户则在大型服务器(内存超过 0.5TB)上运行 DuckDB。

至于服务器的部署位置,27% 的用户选择了本地部署,另外 27% 的用户则使用了 AWS 云服务。接下来是 Microsoft Azure 和 Google Cloud Platform,分别占据了少量份额。而约 4% 的用户使用 Hetzner 服务器。

数据
数据格式
我们还调查了用户在使用 DuckDB 时选择的数据格式。结果显示,Parquet 是最受欢迎的格式,79% 的用户使用它。CSV 紧随其后,占 73%。JSON 也颇受欢迎,其中普通 JSON 占 42%,NDJSON 占 11%。此外,约三分之一的用户使用 Arrow 格式。

数据集规模
我们还询问了用户用 DuckDB 处理的最大数据集规模。我们将 数据集大小 定义为数据以未压缩 CSV 格式存储时的大小。对于 Parquet 文件和 DuckDB 数据库文件,建议用户将文件大小乘以 5 来估算 CSV 大小。
调查结果表明,只有少数用户使用 DuckDB 处理 大数据。约 ¾ 的用户处理的数据集小于 100 GB,20% 的用户处理的数据集规模在 100 GB 到 1 TB 之间,约 5% 的用户处理了 1 TB 以上的数据集。还有约 1% 的用户处理了超过 10 TB 的超大数据集。
这些结果与 RedShift 数据集[4] 和 Snowflake 及 RedShift 使用分析[5] 的数据基本一致。

尽管如此,调查结果显示,使用 DuckDB 处理大数据的用户比例较小。这说明很多现实场景可以通过小型或中型数据集来解决。同时,DuckDB 在处理 1 TB 以上的数据集时依然能胜任不少复杂任务。
功能
最受欢迎的功能
我们很感兴趣用户最喜欢 DuckDB 的哪些功能。根据调查结果显示,高性能 是最受欢迎的功能。
此外,用户还很喜欢 文件格式支持(如 CSV、Parquet、JSON 等),简单易用,广泛的 SQL 支持(包括 友好的 SQL 语法[6])以及内存集成,如对 Pandas、Arrow 和 NumPy 的支持。
用户还提到了低内存占用、协议支持(如 HTTPS、S3)、数据库集成以及跨平台的便携性。

功能需求
我们还询问了用户希望在未来的 DuckDB 版本中看到哪些新功能。以下是最受欢迎的请求:
| 功能 | 比例 |
| 改进分区支持以及与分区相关的优化 | 39% |
| 改进时间序列数据支持及预排序数据优化 | 35% |
| 支持物化视图 | 28% |
| 支持向量搜索 | 24% |
| 支持通过 ODBC 连接数据库 | 24% |
| 支持时间旅行查询(查询指定时间点的数据) | 23% |
| 支持 Delta Lake 格式 | 22% |
| 改进对 Iceberg 格式的支持(包括写入) | 17% |
值得一提的是,自调查以来,DuckDB 已从 v1.0.0 版本更新至 v1.1.1,部分用户请求的功能已经实现:
• 现在可以通过 `delta` 扩展 读取 Delta Lake 数据。
• 通过 `vss` 扩展,DuckDB 现在支持向量搜索功能。
其他功能也在积极开发中,未来的更新将逐步满足这些需求。敬请期待!
用户角色
最后,我们还询问了用户在组织中的主要职责。前五名角色如下:

不出所料,DuckDB 在与数据相关的角色中非常受欢迎:26% 的受访者是数据工程师,14% 是数据科学家,9% 是数据分析师。出乎意料的是,23% 的受访者是软件工程师。还有约 2% 的受访者是数据库管理员(DBA)。
结论
我们非常感谢所有参与者抽出时间完成此次调查。
这些反馈将帮助我们在未来的发展中更加贴近用户需求。我们也希望这篇调查分析能为大家提供有价值的信息。
引用链接
[1]
Python 语言的流行度: https://www.tiobe.com/tiobe-index/python/[2]
独立命令行工具: https://duckdb.org/docs/api/cli/overview[3]
Linux 桌面市场份额: https://gs.statcounter.com/os-market-share/desktop/worldwide/2024[4]
RedShift 数据集: https://motherduck.com/blog/redshift-files-hunt-for-big-data/[5]
Snowflake 及 RedShift 使用分析: https://www.fivetran.com/blog/how-do-people-use-snowflake-and-redshift[6]
友好的 SQL 语法: [https://duckdb.org/docs/sql/dialect/friendly_sql




