Пользователь при загрузке своего фото, создаёт папку с названием своего ID, данная папка создаётся в папке uploads. Так как проект планируется быть популярным, задался вопросом, а ведь если будет более 100 тысяч пользователей с фото, это ведь 100 тысяч папок в папке uploads. Какое ограничение вложенных папок в папке на системе linux?
Я знаю как это переделать уже, но стоит ли, если пользователей не будет превышать 1-2 миллиона? Читал что один программёр создавал скриптом пол миллиона файлов в папке, при этом доступ к ним был довольно быстрый, это вообще реально?
зависит от файловой системы. но все равно рекомендуется не перегибать палку. добавь одно поле с папокой в два символа. работает достаточно быстро substr('00' . base_convert(rand(0, 1295), 10, 36), -2); выдает 00-zz
[offtop]Я когда в универе учился, любил ставить "эксперименты" с папками и файлами. Открывается любая папочка, в ней создается файлик, а дальше, не отпуская кнопочки crtl, жмем по очереди a, c, v, пока комп не подвиснет. Очень забавно было. А еще соседу по парте, когда он отвлечется, можно было зажать на клавиатуре win+f1. Тоже весело получалось[/offtop]
Более чем 1000-1500 файлов/каталогов в текущем каталоге - это плохо. Нужно дробить на подкаталоги по начальной букве названия каталога (а-яa-z), по дате, по ID и пр.
Я уже переделал структуру. Ссылка выглядит теперь вот так http://мой_сайт/intval(ид_юзера / 1000)/ид_юзера/фото.jpg
Дублирования нет. intval(ид_юзера / 1000) при ид юзера меньше 1000, будет 0, а папка с 0 содержит 1000 папок пользователей, как только юзер имеет ид больше чем 1000, intval(ид_юзера / 1000) будет 1, а в этой папке так-же будут 1000 пользователей, но другие и т.д. Таким методом можно спокойно работать с миллионом пользователей.
общее кол-во каталогов/файлов/ссылок - зависит от размера файловой системы. например, у меня на 183гб разделе ext4 12.2млн нодов можно сделать. а для каталога - беглый гугл дал лимит 32к нодов для ext3 без патча ядра (википедия)
в описании файловой системы всегда указывается какое количество и размеры файлов они поддерживают дробите по нодам, по годам, месяцам и т.д. тормозить не будет ни 1 тыс, ни 10 тыс, ни 100тыс если не запрашивать листинг директории, при прямом обращении к папке юзера проблем не будет если сам юзер не загрузит 100тыс файлов