Подтвердить что ты не робот

Хранение и доступ к 10 миллионам файлов в Linux

Я пишу приложение, которое должно хранить много файлов до примерно 10 миллионов.

В настоящее время они называются UUID и будут составлять около 4 МБ каждый, но всегда одного размера. Чтение и запись из/в эти файлы всегда будут последовательными.

2 основных вопроса Я ищу ответы для:

1) Какая файловая система была бы лучше для этого. XFS или ext4? 2) Нужно ли хранить файлы под подкаталогами, чтобы уменьшить количество файлов в пределах одного каталога?

В вопросе 2 я отмечаю, что люди пытались обнаружить ограничение XFS для количества файлов, которые вы можете хранить в одном каталоге, и не нашли предела, превышающего миллионы. Они не отметили никаких проблем с производительностью. Как насчет под ext4?

Взаимодействуя с людьми, которые делают подобные вещи, некоторые люди предложили сохранить номер inode в качестве ссылки на файл вместо имени файла для производительности (это в индексе базы данных, который я также использую). Однако я не вижу полезного API для открытия файла по номеру inode. Похоже, это было скорее предложение улучшить производительность в ext3, который я не собираюсь использовать, кстати.

Каковы ограничения ext4 и XFS? Какие преимущества в производительности есть у одного из них, и можете ли вы увидеть причину использования ext4 над XFS в моем случае?

4b9b3361

Ответ 1

Вы должны хранить файлы в подкаталогах.

EXT4 и XFS используют эффективные методы поиска для имен файлов, но если вам когда-либо понадобится запускать инструменты по каталогам, таким как ls или find, вы будете очень рады иметь файлы в управляемых кусках 1000 - 10 000 файлов.

Значение номера inode заключается в улучшении производительности последовательного доступа файловых систем EXT. Метаданные хранятся в inodes, и если вы обращаетесь к этим inodes не по порядку, то доступ к метаданным будет рандомизирован. Читая ваши файлы в порядке inode, вы также получаете доступ к метаданным.

Ответ 2

Современные файловые системы позволят вам хранить 10 миллионов файлов в одном каталоге, если хотите. Но инструменты (ls и его друзья) не будут работать хорошо.

Я бы рекомендовал разместить один уровень каталогов, фиксированное число, возможно, 1000 каталогов и поместить туда файлы (10 000 файлов допустимы для оболочки и "ls" ).

Я видел системы, которые создают множество уровней каталогов, это действительно не нужно и увеличивает потребление inode и замедляет ход.

10M файлы также не должны быть проблемой, если вам не нужно выполнять массовые операции над ними.

Я ожидаю, что вам нужно будет обрезать старые файлы, но что-то вроде "tmpwatch", вероятно, будет отлично работать с файлами 10M.