2015-11-01 81 views
1

我一直在使用git-annex一段时间来管理我的数据,并且我发现它非常令人满意。使用git-annex管理许多小文件(〜5KB)

但是,当处理我的神经影像数据时,git annex的表现还是相当缺乏。这类数据通常包含许多图像文件(5KB),例如每个实验每个参与者约36.000个。您甚至可以看到,即使对于少数实验,我的数据存储库也可以在万亿以上的文件中累积。

有什么办法可以缓解运行时的巨大滞后git annex syncgit annex get?如果没有,是否有任何(大致)类似的软件可以让我管理多个神经影像数据库?

回答

1

大量文件在多个层次上效率低下;也许你可以改进神经影像软件?

如果这不是一个选项,你可以做几件事情。首先是将数据存储在SSD上。这些操作很慢,因为它们必须查询存储库中每个文件的状态,并将它们放在SSD上可使每个磁盘的读取速度快得多。

另一个是限制任何给定目录中的文件数量。您可能无法从单个实验中分割文件,但要确保不会将来自多个实验的文件放在同一个目录中。这是因为目录上的访问时间通常与该目录中文件的数量成正比。

另一种情况是调查不同的文件系统或不同的文件系统配置;并非所有文件系统都适合大型目录。例如,在ext3/4上,您可以设置文件系统选项dir_index,以便它使用b-tree索引来加速大型目录的访问时间。使用tune2fs程序进行设置。

最后的绝望选择可能是将所有这些小文件合并到压缩文件或压缩文件等压缩文件中。这可能会使他们的工作复杂化,但会大大减少您必须处理的文件数量。您也可以编写这些导致的一些复杂性;例如,当您需要查看其中一个图像时,您的脚本可能会将tarball解压缩到一个临时目录中,启动查看器,然后在退出时删除解压缩的文件。

1

我同意db48x。如果更换神经影像软件不是一个选项,您可以使用每个实验一个容器(〜180mb是一个合理的大小)并将其与git-annex一起存储。对于数据访问,您将此文件作为一个额外的文件系统挂载在内存中。这应该大大减少访问时间和git-annex的负担。