我一直在使用 git-annex 来管理我的数据,我发现它非常令人满意。
但是,在处理我的神经影像数据时,git附件的性能相当欠缺。这类数据通常来自许多图像文件 (5KB),例如每个参与者每个实验大约 36.000 个。您可以看到,即使是几次实验,我的数据存储库也能积累超过一百万个文件。
有什么办法可以减轻跑步时的巨大延迟git annex sync
吗git annex get
?如果没有,是否有任何(大致)类似的软件可以让我管理多个神经影像数据存储库?
大量文件在多个级别上效率低下;也许你可以改进神经成像软件?
如果这不是一个选项,你可以做几件事。第一个是将数据存储在 SSD 上。这些操作很慢,因为它们必须查询存储库中每个文件的状态,并且将它们放在 SSD 上会使每个磁盘的读取速度快得多。
另一个是限制任何给定目录中的文件数量。您可能无法从单个实验中拆分文件,但请确保您没有将多个实验中的文件放在同一目录中。这是因为对目录的访问时间通常与该目录中的文件数成正比。
另一种方法是研究不同的文件系统或不同的文件系统配置;并非所有文件系统都适合大型目录。例如,在 ext3/4 上,您可以设置文件系统选项 dir_index,以便它使用 b-tree 索引来加快大型目录的访问时间。使用tune2fs
程序进行设置。
最后一个绝望的选择可能是将所有这些小文件合并到档案中,例如 tarball 或 zip 文件。这可能会使使用它们变得复杂,但会大大减少您必须处理的文件数量。您还可以编写脚本消除这导致的一些复杂性;例如,当您需要查看其中一个图像时,您的脚本可以将 tarball 解压缩到临时目录中,启动查看器,然后在退出时删除解压缩的文件。
我同意 db48x。如果无法更改神经成像软件,您可以在每个实验中使用一个容器(~180mb 是一个合理的大小)并将其存储在 git-annex 中。对于数据访问,您将此文件挂载为具有内存环回的额外文件系统。这应该会显着减少 git-annex 的访问时间和负担。