Forever
Новичок
Сегодня прочел несколько статей о том, как нужно реализовывать хранение большого количества изображений на сервере. Ввиду того, что я новичок в веб-програмировании, то эти статьи не прояснили мне ситуацию, а наоборот, завели в еще большие дебри и навели на кучу новых вопросов. И вот на эти вопросы надеюсь получить ответы на этом форуме.
Наверное, для вас эти вопросы могут показаться абсурдными, поэтому я готов принять все летящие помидоры .
Так вот. Отрывок из одной статьи (http://epsiloncool.ru/programmirovanie/php/optimalnyj-sposob-xraneniya-bolshogo-kolichestva-fajlov):
"Ошибка номер 3: сваливать все изображения в одну папку.
Почему и как быть? => Некоторые операционные системы (и Linux тоже) начинают сильно тормозить при доступе в папку, в которой хранится 100 тысяч файлов и более. Идеально, если в каждой папке будет не больше 1000 файлов.
Вот как можно поступить. Для уменьшения количества файлов в каждой папке необходимо делить их по разным подпапкам, в частности, если имя файла сгенерировано через MD5, то можно поступить следующим образом
/ f7 / 89 / f789abc898d6892df98d09a8f8.jpg
Вы видите, что первый уровень подпапки повторяет первые 2 символа имени файла, а второй — следующие два символа. Количество уровней при желании можно увеличивать.
Это гарантирует количество подпапок в каждой папке не более 256 штук, и статистически количество файлов в каждой конечной подпапке будет делиться на 65 тысяч. То есть, при количестве файлов 1 миллион в каждой подпапке окажется по 10-20 файлов. Три уровня вложенности делят это количество на 16 миллионов, чего должно хватить для любых нужд."
И вот чего я не понял:
1) Если в одной папке накопится более 1000 подпапок, то это равносильно наличию 1000 файлов в этой папке? И если да, то какой тогда смысл в подпапке для каждого файла?
2) / f7 / 89 / f789abc898d6892df98d09a8f8.jpg - зачем нужна промежуточная папка 89? Это ведь просто лишнее звено .
3) И вот тут совсем жесть для меня:
Цитата
f7 / 89 / f789abc898d6892df98d09a8f8.jpg - Это гарантирует количество подпапок в каждой папке не более 256 штук.
- почему?
Цитата
и статистически количество файлов в каждой конечной подпапке будет делиться на 65 тысяч.
- почему?
4)
К примеру, я делаю все простым способом без разбиения на подпапки:
создаю основную папку photos, в ней подпапки для каждого пользователя. В каждой подпапке сохраняю все фотографии этого пользователя. Вроде как
photos/user_1/img0.jpg
photos/user_1/img1.jpg
photos/user_1/img2.jpg
Или делаю, как написано выше:
photos/user_1/ha/sh/hash_izobrajeniya1.jpg
photos/user_1/ha/sh/hash_izobrajeniya1.jpg
photos/user_1/ha/sh/hash_izobrajeniya1.jpg
Объясните пожалуйста, чем эти два способа отличаются? Как наличие двух подпапок во втором случае дают все эти самые бонусы из статьи?
Наверное, для вас эти вопросы могут показаться абсурдными, поэтому я готов принять все летящие помидоры .
Так вот. Отрывок из одной статьи (http://epsiloncool.ru/programmirovanie/php/optimalnyj-sposob-xraneniya-bolshogo-kolichestva-fajlov):
"Ошибка номер 3: сваливать все изображения в одну папку.
Почему и как быть? => Некоторые операционные системы (и Linux тоже) начинают сильно тормозить при доступе в папку, в которой хранится 100 тысяч файлов и более. Идеально, если в каждой папке будет не больше 1000 файлов.
Вот как можно поступить. Для уменьшения количества файлов в каждой папке необходимо делить их по разным подпапкам, в частности, если имя файла сгенерировано через MD5, то можно поступить следующим образом
/ f7 / 89 / f789abc898d6892df98d09a8f8.jpg
Вы видите, что первый уровень подпапки повторяет первые 2 символа имени файла, а второй — следующие два символа. Количество уровней при желании можно увеличивать.
Это гарантирует количество подпапок в каждой папке не более 256 штук, и статистически количество файлов в каждой конечной подпапке будет делиться на 65 тысяч. То есть, при количестве файлов 1 миллион в каждой подпапке окажется по 10-20 файлов. Три уровня вложенности делят это количество на 16 миллионов, чего должно хватить для любых нужд."
И вот чего я не понял:
1) Если в одной папке накопится более 1000 подпапок, то это равносильно наличию 1000 файлов в этой папке? И если да, то какой тогда смысл в подпапке для каждого файла?
2) / f7 / 89 / f789abc898d6892df98d09a8f8.jpg - зачем нужна промежуточная папка 89? Это ведь просто лишнее звено .
3) И вот тут совсем жесть для меня:
Цитата
f7 / 89 / f789abc898d6892df98d09a8f8.jpg - Это гарантирует количество подпапок в каждой папке не более 256 штук.
- почему?
Цитата
и статистически количество файлов в каждой конечной подпапке будет делиться на 65 тысяч.
- почему?
4)
К примеру, я делаю все простым способом без разбиения на подпапки:
создаю основную папку photos, в ней подпапки для каждого пользователя. В каждой подпапке сохраняю все фотографии этого пользователя. Вроде как
photos/user_1/img0.jpg
photos/user_1/img1.jpg
photos/user_1/img2.jpg
Или делаю, как написано выше:
photos/user_1/ha/sh/hash_izobrajeniya1.jpg
photos/user_1/ha/sh/hash_izobrajeniya1.jpg
photos/user_1/ha/sh/hash_izobrajeniya1.jpg
Объясните пожалуйста, чем эти два способа отличаются? Как наличие двух подпапок во втором случае дают все эти самые бонусы из статьи?