Является ли проблемой создание каталога для каждой загрузки файла в веб-приложении на Linux/Unix?

Я делаю загрузку файлов для веб-приложения (работающего на unix/linux). Мне интересно, возникнет ли проблема, если я планирую создать новый каталог для каждой загрузки файла? Это стандартный подход для плагина Ruby on Rails «скрепка». Я обсуждаю, каковы компромиссы, или, возможно, это просто не проблема при развертывании в среде Linux/Unix.

Варианты вроде бы такие:

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

Вопрос. Должен ли я беспокоиться о количестве создаваемых каталогов? Является ли это проблемой для операционной системы, если сервис был популярен? Какой-нибудь совет для веб-сайта, который позволял пользователям с их собственной отдельной учетной записью загружать файлы, какая структура может быть хорошей для их хранения? (Думаю, я не принял во внимание концепцию хранения файлов в mysql.)

Спасибо


person Greg    schedule 01.10.2009    source источник


Ответы (3)


Предположим, диск отформатирован в Ext3 под линуксом (самый распространенный).

Откуда (http://en.wikipedia.org/wiki/Ext3)

«Существует ограничение в 31 998 подкаталогов на один каталог, исходя из его ограничения в 32 000 ссылок на индексный дескриптор.[13]»

Таким образом, если вы достигнете предела в 32 000 загрузок, что не так уж и много, ваше приложение потерпит неудачу.

person Chris Hamons    schedule 01.10.2009

Не как таковой, но иметь миллионы папок в одном каталоге (или то же самое для файлов) не рекомендуется (это настоящий удар по скорости).

Причина: строки в стиле c

Хорошим решением было бы иерархически (sic?) хранить что-то вроде: /path/to/usernamefirstletter/username/year/month/file

person aviraldg    schedule 01.10.2009
comment
Также: никогда не используйте эти реальные пути к файлам для пользователей... используйте перенаправление на стороне сервера для более удобных URL-адресов. - person aviraldg; 01.10.2009
comment
На самом деле причина, по которой люди традиционно избегали очень больших каталогов, заключается в том, что каталог представлял собой плоский список без индексации, и это не имеет ничего общего со строками, заканчивающимися нулем. И это все больше не проблема в современных файловых системах, почти все из которых выполняют ту или иную форму индексации каталогов. Все известные мне современные дистрибутивы Linux по умолчанию используют индексированные каталоги, как и Solaris/ZFS. Насчет BSD не уверен. - person Andy Ross; 03.10.2009

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

Использование отдельного раздела (в случае DOS-атаки) только остановит правильную работу вашего приложения, и система никоим образом не пострадает.

person Johannes Weiss    schedule 01.10.2009