如何处理大量(二进制)数据的版本控制

数据挖掘 大数据 数据库 二进制 版本控制
2021-10-12 20:30:11

我是地球物理学的博士生,处理大量图像数据(数百 GB,数万个文件)。我非常了解svn并且git非常重视项目历史,以及轻松协作和防止磁盘损坏的能力。我发现git对于进行一致的备份也非常有帮助,但我知道 git 不能有效地处理大量的二进制数据。

在我的硕士学习中,我研究了类似大小的数据集(还有图像),并且在跟踪不同服务器/设备上的不同版本时遇到了很多问题。通过网络区分 100GB 真的不好玩,而且花费了我很多时间和精力。

我知道科学界的其他人似乎也有类似的问题,但我找不到好的解决方案。

我想使用我研究所的存储设施,所以我需要一些可以使用“哑”服务器的东西。我还想在便携式硬盘上进行额外的备份,因为我想尽可能避免通过网络传输数百 GB。所以,我需要一种可以处理多个远程位置的工具。

最后,我真的需要其他研究人员可以使用的东西,所以它不需要超级简单,但应该在几个小时内就能学会。

我评估了很多不同的解决方案,但似乎没有一个符合要求:

  • svn效率有点低,需要智能服务器
  • hg bigfile / largefile只能使用一个遥控器
  • git bigfile / media也可以只用一个遥控器,但效率也不是很高
  • 阁楼似乎没有日志或差异功能
  • bup看起来很不错,但需要一个“智能”服务器才能工作

我已经尝试过git-annex,它可以完成我需要它做的所有事情(以及更多),但它很难使用并且没有很好的文档记录。我已经使用了好几天,无法理解它,所以我怀疑任何其他同事都会感兴趣。

研究人员如何处理大型数据集,其他研究小组在使用什么?

需要明确的是,我主要对其他研究人员如何处理这种情况感兴趣,而不仅仅是这个特定的数据集。在我看来,几乎每个人都应该有这个问题,但我不知道有谁解决了这个问题。我应该只保留原始数据的备份而忘记所有这些版本控制内容吗?这就是其他人都在做的事情吗?

4个回答

我最终使用的是一种混合解决方案:

  • 原始数据的备份
  • 工作流的 git
  • 相关的工作流+已处理数据的手动快照,例如:
    • 标准预处理
    • 真的很费时间
    • 出版

我认为拥有大量二进制数据的完整修订历史很少是明智的,因为审查更改所需的时间最终会如此巨大,以至于从长远来看不会有回报。也许半自动快照程序(最终节省一些磁盘空间,通过不在不同快照之间复制未更改的数据)会有所帮助。

尝试查看Git 大文件存储 (LFS)它是新的,但可能是值得一看的东西。

正如我所看到的,关于 Hacker News 的讨论提到了处理大文件的其他一些方法:

我用非常大的合成生物学数据集处理过类似的问题,我们有很多很多 GB 的流式细胞术数据分布在数千个文件中,并且需要在(多个)不同机构的协作组之间保持一致。

像 svn 和 git 这样的典型版本控制在这种情况下并不实用,因为它不是为这种类型的数据集设计的。相反,我们已经转向使用“云存储”解决方案,尤其是DropBoxBittorrent Sync. DropBox 的优点是它至少做了一些原始的日志记录和版本控制,并为你管理服务器,但缺点是它是一项商业服务,你必须为大存储付费,而且你将未发布的数据放在一个商业存储;不过,您不必支付太多费用,因此这是一个可行的选择。Bittorrent Sync 有一个非常相似的界面,但你自己在自己的存储服务器上运行它,它没有任何版本控制。它们都伤害了我的程序员灵魂,但它们是我和我的合作者迄今为止找到的最好的解决方案。

在 Amazon S3 存储桶上使用版本控制来管理 10-100 个文件中的 10-100GB。传输可能很慢,因此它有助于并行压缩和传输,或者只是在 EC2 上运行计算。boto库提供了一个不错的 python 接口