Проблемы, о которых вам было сказано, скорее всего, связаны с влиянием на производительность складывания тысяч и тысяч файлов в один каталог .
Чтобы обойти это, не храните ваши файлы непосредственно в одном каталоге, но попробуйте распространить их в подкаталогах ( buckets ).
Чтобы добиться этого, посмотрите на идентификатор (скажем, 19873) файла, который вы собираетесь сохранить, и сохраните его под <uploads>/73/98/19873_<filename.ext>
, где 73 - ID % 100
, 98 - (ID / 100) % 100
и т. Д.
Вышеуказанное гарантирует, что у вас будет не более 100 подкаталогов под <uploads>
и не более 100 дополнительных подкаталогов под <uploads>/*
. Это значительно сократит количество файлов в каталоге на листьях.
Два уровня подкаталогов достаточно типичны и представляют собой хороший баланс между тем, что не нужно тратить слишком много времени на преобразование имен каталогов или файлов в inode по ширине (что происходит, когда у вас слишком много имен файлов для просмотра в одном каталоге - хотя современные файловые системы, такие как ext3
, будут очень эффективными здесь) и глубина (что происходит, когда вам нужно углубиться в 20 подкаталогов в поисках вашего файла). Вы также можете выбрать большее или меньшее значение (10, 1000) вместо 100. Два уровня по модулю 100 идеально подходят для файлов размером от 100 тыс. До 5 млн.
Используйте ту же технику для расчета полного пути к файлу в файловой системе с учетом идентификатора файла, который необходимо получить.