HDF5 文件是否适合 git 版本控制?

计算科学 数据管理 数据存储
2021-11-29 00:40:04

我不熟悉 HDF5 中使用的文件格式,但我想知道 HDF5 文件是否适合使用 git(或例如 Mercurial 或 Subversion)进行修订控制?我想我的意思是:HDF5 文件是否适合基于行的差异,或者 git 是否必须将 HDF5 视为一个大二进制文件并为每个修订存储一个完整副本?

3个回答

如果您提供更多关于您尝试将哪种数据置于版本控制之下、您希望如何存储不同版本的数据、哪些组件可能会更改的更多技术细节,您将会得到一个更好的答案以及哪些组件不是,以及您是否真的会拥有树状历史(分支、合并)。

HDF5 文件不适合 git 下基于 diff 的版本控制。

git 在后台使用基于哈希的数据库,因此可以存储 HDF5 数据文件的哈希,而无需实际存储文件本身。三个项目git-fatgit-annexgit-media为您大大简化了这个过程。如果你有大量的、完全独立的数据块并且你想明确地版本化,我会建议使用这种方法。

如果你能把你的数据存储分成非易失和易失区域,这将大大提高你与版本控制数据库交互的效率。如果您不需要 git 提供的 DVCS 功能,您可能还需要考虑为您的数据显式使用数据库。

我想我的意思是:HDF5 文件是否适合基于行的差异,或者 git 是否必须将 HDF5 视为一个大二进制文件并为每个修订存储一个完整副本?

这个问题的字面答案是 git 不会有效地处理 HDF5 文件。

有关具有一些二进制文件的项目的版本控制的更多有用答案,请参阅此 stackoverflow 问题: https ://stackoverflow.com/questions/540535/managing-large-binary-files-with-git

正如其他人所说,如果您描述您的总体目标而不是精确的技术点,那么提出有用的建议会更容易。这里还有一个可能对您有所帮助的建议,具体取决于您的目标。

ActivePapers 项目 ( http://www.activepapers.org/ ) 在 HDF5 之上提供了一个代码和数据管理系统。ActivePaper 是一个 HDF5 文件,其中包含数据集和在其上工作的代码,元数据会跟踪哪段代码计算了哪个数据集以及使用了哪个输入数据。结合源代码的版本控制和/或整个 HDF5 文件的版本控制(使用 git-annex 等工具,在另一个回复中提到),ActivePapers 可用于版本控制计算,而不是孤立的文件或数据集。

免责声明:我是 ActivePapers 的作者。