Управляйте многими маленькими (~5 КБ) файлами с помощью git-annex

Некоторое время назад я использовал git-annex для управления своими данными, и я нашел его вполне удовлетворительным.

Однако при работе с моими данными нейровизуализации производительность приложения git весьма недостаточна. Этот тип данных часто приходит в виде множества файлов изображений (5 КБ), например, около 36 000 на участника на эксперимент. Вы можете видеть, как даже за несколько экспериментов мое хранилище данных накапливается в миллионах файлов.

Есть ли способ уменьшить огромное отставание при запуске git annex sync или же git annex get? Если нет, существует ли какое-либо (примерно) подобное программное обеспечение, которое может позволить мне управлять несколькими хранилищами данных нейровизуализации?

2 ответа

Большое количество файлов неэффективно на нескольких уровнях; возможно, вы могли бы улучшить программное обеспечение нейровизуализации?

Если это не вариант, вы можете сделать несколько вещей. Первый - хранить данные на SSD. Эти операции выполняются медленно, потому что они должны запрашивать состояние каждого из файлов в вашем хранилище, а размещение их на SSD делает чтение каждого диска намного, намного быстрее.

Другим является ограничение количества файлов в любом каталоге. Возможно, вы не сможете разделить файлы из одного эксперимента, но убедитесь, что вы не помещаете файлы из нескольких экспериментов в один каталог. Это связано с тем, что время доступа к каталогу часто пропорционально количеству файлов в этом каталоге.

Другой - исследовать разные файловые системы или разные конфигурации файловых систем; Не все файловые системы хороши с большими каталогами. Например, в ext3/4 вы можете установить опцию файловой системы dir_index, чтобы она использовала индексы b-дерева для ускорения времени доступа к большим каталогам. Использовать tune2fs программа для его установки.

Последним отчаянным вариантом может быть объединение всех этих крошечных файлов в архивы, такие как архивы или zip-файлы. Это может усложнить работу с ними, но значительно уменьшит количество файлов, с которыми вам придется иметь дело. Вы также можете написать некоторые сложности, которые это вызывает; Например, когда вам нужно просмотреть одно из этих изображений, ваш скрипт может извлечь архив во временную директорию, запустить программу просмотра, а затем удалить извлеченные файлы при выходе.

Я согласен с db48x. Если изменение программного обеспечения для нейровизуализации не является возможным вариантом, вы можете использовать один контейнер для эксперимента (~180 МБ - разумный размер) и хранить его с помощью git-annex. Для доступа к данным вы монтируете этот файл как дополнительную файловую систему с обратной связью в памяти. Это должно значительно сократить время доступа и нагрузку на git-приложение.

Другие вопросы по тегам