Я хочу управлять огромным количеством файлов на своем сервере (скажем, миллионами). Необходимо сохранять файлы в двух или трех уровнях папок, чтобы количество файлов в каждой папке было небольшим. С другой стороны, нецелесообразно иметь много папок для размещения инодов.
Насколько оптимальное соотношение файлов в папке? Есть ли теоретический подход, чтобы определить это, или это зависит от характеристик сервера?
Спецификации сервера, вероятно, будут представлять меньшую проблему, чем используемая вами файловая система. В разных файловых системах используются разные подходы к хранению данных каталогов. Это повлияет на скорость сканирования при разных размерах.
Еще одно важное соображение - это жизненный цикл файлов. Если вы часто добавляете и удаляете файлы, вы можете захотеть, чтобы конечные каталоги были меньше, чем они могли бы быть в противном случае.
Вы можете посмотреть структуры каталогов кеша, используемые веб-сервером Apache и прокси-сервером Squid. Это хорошо протестированные кеши, которые обрабатывают относительно высокие темпы изменений и хорошо масштабируются.
РЕДАКТИРОВАТЬ: ответ на ваш вопрос в значительной степени зависит от жизненного цикла и шаблонов доступа к файлам. Эти факторы будут существенно влиять на требования к дисковым операциям ввода-вывода и буферной памяти. Количество файлов, вероятно, будет менее важным фактором.
Помимо выбранной файловой системы, на производительность доступа к диску будут влиять память, дисковые интерфейсы, количество дисков и установка рейда. Производительность должна быть достаточной для выполнения требований с некоторой свободой действий.
Настройка диска имеет тенденцию быть более важной по мере увеличения количества операций записи и удаления. Это также может быть более важным, поскольку доступ к файлам становится более случайным. Эти факторы имеют тенденцию повышать требования к пропускной способности диска.
Увеличение памяти обычно повышает вероятность доступа к файлам из дисковых буферов, чем из диска. Это повысит производительность доступа к файлам для большинства систем. Доступ ко многим большим файлам может привести к ухудшению кэширования диска.
Для большинства систем, с которыми я работал, вероятность доступа к файлу связана с тем, когда к нему последний раз обращались. Чем позже был осуществлен доступ к файлу, тем больше вероятность того, что он будет доступен снова. В таких случаях для оптимизации поиска важны алгоритмы хеширования. Если доступ к файлам действительно случайный, это менее важно.
Дисковый ввод-вывод, необходимый для удаления файла, может быть значительно выше, чем при добавлении файла. Многие системы имеют серьезные проблемы с удалением большого количества файлов из больших каталогов. Чем выше частота добавления и удаления файлов, тем значительнее это становится. Жизненный цикл файла является важным фактором при рассмотрении этих факторов.
Еще одна проблема - резервное копирование, которое может потребоваться запланировать, чтобы не возникло проблем с буферизацией диска. Новые системы позволяют контролировать ввод-вывод, поэтому резервное копирование и другие программы обслуживания меньше влияют на приложение.