Каким образом хранить огромное кол-во фото на сервере?

Статус
В этой теме нельзя размещать новые ответы.
Я бы сделал через остаток от деления по id пользователя. Очень легко и не затратно получать нужную папку и разбить на необходимое кол-во папок:

PHP:
  $folder_id = $user_id % 100;
Там где 100 соответственно можно увеличить на любое другое необходимое количество папок.

Так же можно придумать и под вложенные папки:

PHP:
  $folder_id = $user_id % 100;
  $sub_folder_id = $user_id % 15;
 
// $folder_id/$sub_folder_id/$id_img.jpg
 
Как вариант -хранить файлы в базе данных. Базы даже имеют специальные движки для этого.
 
Из всех предложенных вариантов выбрал вариант, предложенный Для просмотра ссылки Войди или Зарегистрируйся - он оказался самым простым.
Только я сделал не через остаток от деления по id пользователя, а просто делю id пользователя на 1000 и обрабатываю рез-т ф-цией intval
Код:
$id_folder = intval($userid / 1000);
Получится что фотки юзеров с id 30000-30999 хранятся в папке 30, 31000-31999 в папке 31 и т.к.
Просто - вычисляем папку в скрипте одной простой строкой кода.
Даже если вручную нужно фото найти скажем id 41245 - сразу ясно, что его в 41-й папке искать.
И хранить в папке ~ 3000-15000 фото считаю оптимальным.
Спасибо Для просмотра ссылки Войди или Зарегистрируйся ;)
 
Рад был помочь:)

Да метод с простым делением тоже по своему хорош, только определится с правильным количеством деления главное, чтобы не сильно много папок было и не сильно много файлов в папках.
Удобно, что с новой партией будут новые папки.
И самый главный плюс очень легко делать бэкапы, ведь в старые папки не будут загружаться файлы и их можно постоянно не копировать, а только новые.

Метод с остатком по делению будет лучше в плане равномерной загруженности папок, но хуже дело с бэкапом.
 
я бы сделал католог для каждого символа из id. Имя файла в базе не обязательно должно содержать "43224_ ", достаточно mhv7gfFhb.jpg, если у нас уже есть id.
id читаем как строку. Пока не достигнут конец строки, начиная с первого символа заходим в каталог с именем первого символа (4), затем заходим во вложенный в него каталог со именем второго символа (2), затем в 2, в 2, в 4 и читаем файл mhv7gfFhb.jpg. Итого путь до файла 4/3/2/2/4/mhv7gfFhb.jpg. При пятизначном id всего будет 10^5=100000 папок (довольно мало) - по одной папке под каждого пользователя. В ней будут храниться все файлы этого пользователя. Имхо гораздо нагляднее, проще, понятнее и удобнее при дальнейшей работе с файлами пользователей. Конечно, на вкус и цвет... Предыдущий вариант мне тоже понравился, интересно и оригинально.

p.s. Предположим у тебя папка images, в которой хранятся все папки. Тогда в ней будет 10 папок с именами от 0 до 9, в каждой из которых также будет 10 папок от 0 до 9 и т.д. А поскольку мы изначально парсим id не статично, а по условию "пока не достигнут конец строки", то даже если количество пользователей перевалит за 100000, тебе не нужно будет ничего менять в коде.
 
Большинство популярных способов уже перебрали, во избежание флуда тема закрыта.
Если есть что добавить, вэлком в личку к ТСу или модератору.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху