ck+数据集_GHTorent数据集和工具套件

Gousios, G. 2013. "The GhTorent Dataset and Tool Suite," IEEE International Working Conference on Mining Software Repositories, San Francisco, CA, USA, pp. 233-236.

在过去的几年中,GitHub已经成为一个流行的项目托管、镜像和协作平台。 GitHub提供了广泛的REST API,使研究人员能够检索高质量的互连数据。 GHTorent项目已经收集了超过一年的Github上所有公共项目的数据。 在本文中,我们介绍了数据集的详细信息和构建过程,并概述了由此产生的挑战和研究机会。


前言

近年来,Github已成为许多开源软件(OSS)项目的首选存储库托管站点。Github为整个数据集提供了REST API,使其成为有吸引力的研究目标。GHTorent项目使用Github API收集原始数据并提取,存档和共享可查询的元数据。Gousios and Spinellis (2012) 介绍了该项目的概述和实现的部分。自这项工作以来,我们将收集过程扩展到了额外的15个API端点,稳定了数据和元数据架构,并开发了一项服务来协作收集和共享数据。已经收集了900GB的原始数据和10GB的元数据,可供下载。在本文中,我们介绍了最终的模式,克服了使用数据集的挑战和局限性,并概述了由此产生的研究机会。


数据收集

数据收集过程的主要挑战是Github每小时对经过身份验证的请求施加5000个请求的限制,而事件的发生率已经更高。GHTorent从头开始设计为过度使用缓存(以避免重复请求),并进行分布式分配(以使多个用户能够并行检索数据)。

资源查询结果可以非常有效地进行缓存,因为根据定义,它们永远不会改变。范围查询很难缓存,因为其结果可能会随着项目的发展而变化(新的提交,新的关注者等);幸运的是,默认情况下,Github首先提供较新的结果,因此只需要浏览结果的前几页就足以检索更新的数据。为了缓存每个实体的结果,GHTorent使用MongoDB数据库,该数据库具有启用对原始数据进行查询的附加好处。在HTTP请求层也使用了缓存。GHTorent自动将HTTP响应序列化到磁盘。这样可以避免两次在范围查询中检索较旧的页面。

镜像算法基于递归依赖性解析过程。对于每个可检索项,我们指定一组依赖项,因为它们从数据架构中逻辑地流动(见图1)。例如,为了检索项目,必须首先检索拥有的用户。同样,为了检索拉取请求,需要首先检索项目。如果依赖关系解析的任何步骤失败,则整个项目将标记为未检索。该过程从一开始就被设计为是幂等的:依赖关系解析的每个步骤都可能失败,但是一旦成功,它将始终返回相同的结果。这种设计选择非常重要,因为它使我们的数据存储区仅追加,并且每个步骤的结果都可记忆并因此可缓存。

c3ed0052a5bb542980d18ca4c9b385ce.png

数据模式

数据模式如图1所示。按照Github的API组织,大多数实体都属于一个项目,并包含与用户启动的操作相对应的条目。该模式还记录有关用户、组织及其成员(组织成员)的信息,而提交则在项目、它们的派生和拉取请求之间共享。大多数实体都带有其创建日期(created_at字段)的时间戳,而对于时间上可能处于多个状态(例如拉取请求和问题)的实体,其他表则按时间顺序记录了这些状态。对于与API调用相对应的实体,ext_ref_id字段包含MongoDB数据库中原始实体的唯一标识符。

数据工作者

数据收集从一开始就设计为分散的过程。分权使用工作人员队列模型进行调解。消息生产者将消息发送到适当的队列,几个工作人员处理消息,执行请求并将结果存储在共享数据库中。分散化使协作的研究人员可以通过我们称为数据模型的工作者为数据收集工作做出贡献。为了交换数据​​收集人员,该项目提供了对实时项目数据库的直接访问。该项目的网站提供了针对工作人员以及预先配置的虚拟机的设置说明。除了提供对数据的直接访问之外,该项目还以原始格式和关系格式分发收集的数据的转储。根据使用情况,关系转储可能足以进行进一步处理。使用BitTorrent协议分发转储。此外,查询界面允许第三方用户直接查询关系数据库的存档版本。


挑战和局限

从存储库挖掘的角度来看,GHTorent数据集具有以下局限性

  • 数据是可加的:当用户或存储库被标记为已删除时,无法更新GHTorent数据库中的信息。
  • 重要实体未加时间戳:无法在特定时间戳查询用户的关注者或存储库的观察者。解决方法是,GHTorent使用执行跟踪/监视操作时生成的事件的时间戳,但这仅限于自GHTorent项目开始收集数据以来发生的事件。
  • Issues和pull requests:对代码评论的pull_request_comments和对pull requests的issue_comments需要从多种源提取。
  • commit users:Git允许用户将自定义用户名设置为其提交名。普遍的惯例是用户将电子邮件用作提交名称。但这不是严格的要求。GHTorent依靠git用户名解析将users表中的条目链接到commits表中的条目。如果提交用户不是Github用户或git用户的名称配置错误,则GHTorent将创建一个伪造的用户条目。
  • 在Github外merge的pull requests:尽管Github通过pull requests在存储库之间自动生成和提交补丁,但并不需要通过Github接口进行合并。很多pull requests被关闭但没被报告merged。在这种情况下,我们可以通过检查commits(通过其SHA ID标识)是否出现在主项目的存储库中(通过元数据查询)来推断出merge了pull requests。但是,这种启发式方法并不完整,因为一些项目使用提交压缩甚至基于差异的修补程序在分支之间转移提交,从而失去了作者信息。
  • 问题跟踪是开放式的:不能在项目之间统一检查错误的特征。
  • 更改数据格式:提交条目架构更改了两次,watchers实体已重命名为stargazers。
  • 某些事件可能会丢失:镜像系统(软件或网络)中的故障可能会导致某些部分的数据丢失。
  • REST查询返回修改后的结果:如果在不同时间查询某些REST API调用,则会返回经过稍微修改的结果。

研究机会

  1. 统一的开发人员身份:研究人员可以跟踪跨项目的开发人员操作(例如,开发人员迁移)。
  2. 软件生态系统:GHTorent数据集具有有关项目及其分支的丰富、带有时间戳的信息。
  3. 网络分析:Github上正在形成几个网络,例如通过分支的项目网络,通过参与共同项目的开发人员网络,通过关注其他用户并查看存储库的社交网络。网络分析可以预测未来行为网络行为等。
  4. 协作和促进:GHTorent数据集提供带时间戳的数据,以调查小贡献(drive-by commits)和项目forking如何导致开发人员和项目协作以及如何将外部开发人员提升为团队成员。
  5. 现有研究的复制。
  6. 可扩展的数据集:可以使用自定义分析和数据链接工具扩展数据集。

相关工作

与GHTorent类似的是Github Archive。这两个项目都反映了Github的公共活动时间表。时间轴的来源不同;虽然GHTorent使用官方的Github API时间轴,但是Github Archive解析用于创建相应Github网页的数据。 由于两个API端点之间的差异,Github Archive的事件数据集更加丰富。但是,GHTorent还会从事件时间轴中检索链接的数据,从而使它可以追溯到历史记录中。实际上,尽管Github Archive的数据从2012年2月开始,但GHTorent的数据集已经扩展到2008年。此外,GHTorent工具集允许检索单个项目的完整历史记录以及单个项目的完整动作列表。


更多信息请访问http://www.ghtorrent.org。

项目源代码见https://github.com/gousiosg/github-mirror。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值