Если вы хотите (или нуждаетесь) хранить файлы на диске, а не в виде больших двоичных объектов в базе данных, необходимо помнить о нескольких вещах.
Многие (но не обязательно все) файловые системы не очень хорошо работают с папками, содержащими много файлов, поэтому вы, вероятно, не хотите хранить все в одной большой папке - но это не значит, что вам нужен специализированный хостинг.
Ключ заключается в том, чтобы распределить файлы в иерархии папок на основе некоторой хэш-функции. В качестве примера, мы будем использовать MD5 имени файла здесь, но не особенно важно, какой алгоритм вы используете или какие данные вы хэшируете, если вы последовательны и располагаете данными, когда вам нужно найти файл .
Как правило, выходные данные хеш-функции форматируются в виде шестнадцатеричной строки: например, MD5 для "foo.mp3" имеет значение 10ebb1120767e9de166e0f5905077cb1.
Вы можете создать 16 папок, по одной на каждый из возможных шестнадцатеричных символов - таким образом, у вас есть каталог 0, одна с именем 1 и т. Д. До f.
В каждой из этих 16 папок повторите эту структуру, чтобы у вас было два уровня. (0/0 /, 0/1 /, ..., f / f /)
Затем вы просто помещаете файл в папку, продиктованную его хешем. Вы можете использовать первый символ, чтобы определить первую папку, и второй символ, чтобы определить подпапку. Используя эту схему, foo.mp3 будет идти в 1/0 /, bar.mp3 - в b / 6 /, а baz.mp3 - в 1 / b /.
Поскольку эти хеш-функции предназначены для равномерного распределения их значений, ваши файлы будут распределены довольно равномерно по этим 256 папкам, что уменьшает количество файлов в любой отдельной папке; по статистике, 15000 файлов в среднем составят около 60 на папку, что не должно быть проблемой.
Если вам не повезло и выбранная вами хеш-функция в конечном итоге приводит к объединению слишком большого количества ваших файлов в одной папке, вы можете расширить иерархию до более чем двух уровней или просто использовать другую хеш-функцию. В обоих случаях вам нужно распространять файлы, но вам нужно сделать это только один раз, и вам не составит труда написать скрипт, который сделает это за вас.
Для управления вашими файлами вам, вероятно, понадобится небольшая база данных, индексирующая, какие файлы у вас есть в данный момент, но это не обязательно нужно использовать для чего-то другого, кроме управления ими - если вы знаете имя файла и используете имя файла в качестве входных данных для вашей хеш-функции, вы можете просто снова вычислить хеш и найти его местоположение таким образом.