
本文字数:15679;估计阅读时间:40 分钟
作者:The ClickHouse & Ruby Central teams
本文在公众号【ClickHouselnc】首发

Ruby 开发者请注意,我们带来了一个好消息!继 ClickPy 在 Python 社区取得巨大反响之后,我们与 Ruby Central 合作,在 sql.clickhouse.com 上推出了免费的 Ruby Gem 下载分析服务。通过这个平台,Ruby 社区可以轻松使用 SQL 查询,对自 2017 年以来的全部 Gem 下载数据进行分析——总数据量超过 1800 亿行!
SELECT toStartOfMonth(date) as month, sum(count) as total_downloads
FROM rubygems.downloads_per_day
GROUP BY month
ORDER BY month ASC
如果你想了解这项服务的来龙去脉,请继续阅读;如果更关心如何使用,也可以直接查看下方示例查询,或访问公共服务页面立即开始体验。
一切始于 Python

2024 年初,我们推出了 ClickPy,这是一个用于分析 Python 软件包下载情况的简单应用。它背后的数据集会记录通过 PyPI 仓库发生的每一次下载 —— 每当开发者执行一次 pip install,ClickHouse 就会新增一条记录。
短短九个月内,数据量就突破了 1 万亿行。目前的累计下载总数已超过 1.43 万亿,并且每天仍以超过 20 亿行的速度增长。
SELECT formatReadableQuantity(count()) as number_rows FROM pypi.pypi
SELECT date, sum(count) AS total
FROM pypi.pypi_downloads_per_day
GROUP BY date
ORDER BY date ASC
除了网页界面,包维护者和技术爱好者还可以通过 sql.clickhouse.com,直接使用 SQL 查询这个数据集。这项免费的服务广受欢迎,每月的查询量已经超过 50 万次!(上面的示例查询正是基于这项服务)
对于好奇这项服务背后技术细节的用户,我们撰写了详细的博客和文档,介绍了 ClickPy 的实现原理、所用的 ClickHouse 功能,以及它如何在面对上万亿行数据时依然实现毫秒级响应。同时,我们也分享了如何构建一个稳定、公开、并可供用户公平访问的服务。
欢迎 Ruby Central 加入
在 ClickHouse,我们对大型数据集情有独钟。所以当 Ruby Central 的 Marty Haught 联系我们,希望为 Ruby 社区打造一项类似的服务时,我们欣然响应:
Hi Dale,
RubyGems 团队的几位成员在看到 ClickPy 网站后感到非常惊艳,他们很好奇是否也能为 RubyGems 创建一个类似的分析平台。你知道 ClickHouse 是否愿意支持开源软件包仓库的分析服务吗?
谢谢,Marty
除了 PyPI 数据集,sql.clickhouse.com 目前还托管着超过 35 个公共数据集,每一个都配有完整的文档说明,并且支持免费查询。因此,当我们有机会再新增一个包管理类数据集 —— 特别是像 RubyGems 这样对开源社区具有高度价值、在技术层面也颇具挑战的数据集时,我们当然不会错过。
在与 Marty 以及 Ruby Central 的 Samuel Giddens 进行了一次简短的沟通后,我们确认了一个并不让人意外的好消息:RubyGems 的数据结构与 PyPI 的结构高度相似。
Ruby 数据集
Ruby Central 是一个支持 Ruby 语言及其生态系统的非营利组织。他们还负责维护 RubyGems 包管理仓库和 gem 命令行工具,这些都是 Ruby 社区赖以运行的重要基础设施。
如果你曾经安装过 Ruby 包(也称为 gem),那么你用到的就是 RubyGems。就像 Python 用户使用 pip 一样,Ruby 开发者只需输入一行命令,例如 gem install rails,即可完成安装。
在背后,这个命令会向 Ruby Central 维护的 RubyGems.org 包注册中心发起一个请求。每当开发者安装一个 gem,系统都会记录包括包名、版本号、平台和时间戳等元数据。
这些操作构成了几个有价值的数据集。
下载日志
每一条记录都包含时间戳、包名、版本、平台信息,以及大量客户端环境的元数据,比如所用的 Ruby 版本、操作系统、下载是否由 Bundler 或 CI 触发、还有如国家和城市的地理位置数据。同时还会记录请求和响应的技术细节,包括 TLS 协议版本、HTTP 状态码、响应时延和缓存行为等。这些信息非常适合用于分析 Ruby 生态系统中的下载趋势、使用模式和运行环境。
截至 2025 年 4 月,这个下载日志已经是目前规模最大的一个数据集,总行数超过 1800 亿,数据可追溯到 2017 年。我们也希望这部分数据尽量保持实时更新。考虑到其体量庞大,Ruby Central 提供了 GCS bucket 的数据分发方式,文件以 gzip 压缩的 NDJSON 格式存储,并且每小时生成一次。
每日聚合下载量
Ruby Central 还发布了一个预聚合的数据集,提供每个 gem 的每日下载统计信息。每条记录包括包名、日期、当天的下载次数(daily_downloads),以及截至当日的累计总下载量(total_downloads)。这个数据集会定期更新,可在 GitHub 上获取。虽然它不具备前文提到的数据集那样丰富的元数据和细粒度,但非常适合用于快速趋势分析,让你无需遍历原始日志就能高效观察长期变化。
一些熟悉 ClickHouse 的用户可能会想,既然我们已有原始日志数据,是否还有必要保留这个聚合版本?虽然确实可以通过 ClickHouse 内建的物化视图(materialized view,详见下文)或使用查询按日分组的方式来生成每日下载数据,但这个聚合数据集可以追溯到 2013 年,因此仍具有重要的历史分析价值。
每周数据导出
Ruby Central 还会将 gem 的元数据以每周为单位导出,并上传至 GitHub,形式上类似于 PyPI 提供的项目元数据。这些数据集提供了超越下载数量的更丰富的 Ruby 生态视角,包括:
- attestations(认证信息):包含特定 gem 版本的签名元数据,例如软件物料清单(SBOM)和安全认证信息,以 JSON 格式存储。
- deletions(删除记录):记录已被移除的 gem 版本,包含 gem 名称、版本、平台和执行删除操作的用户信息。
- dependencies(依赖关系):记录每个 gem 声明的依赖项、版本约束以及作用范围(如运行时或开发依赖)。
- gem_downloads(版本下载总量):记录每个 gem 版本的累计下载次数,用于分析其在某一时点的流行度。
- linksets(链接信息):包含与每个 gem 相关的链接地址,如主页、文档、源代

最低0.47元/天 解锁文章
1178

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



