Огромное количество картинок в одной директории ...

Rezec

По пиву? (socket80)
Огромное количество картинок в одной директории ...

Предположим что есть огромный сайт - по типу http://members.msn.com у каждого юзера есть своя фотка.
Хранить в базе как-то не хочется, поэтому выбираю файловую систему. Ну и тут вопросик - если свалить тыщ так 100 в одну директорию ничего случаем не отвалится? И главное производительность, ведь ОС будет рыскать по этой директории в поте лица (наверное).
 

tony2001

TeaM PHPClub
с reiserfs ничего не должно быть, т.к. она под это оптимизирована.
остальные скорее всего будут конкретно тормозить.
а вообще, такие вещи обычно бьют на директории примерно по такому принципу:

.../pictures/t/to/tony2001.jpg
.../pictures/s/so/somebody_else.jpg
 

Кром

Новичок
Не надо в одну, зачем? Есть же много вариантов для разделения групп картинок. По первой букве, по ID, по времени и тд. и тп.
 

Rezec

По пиву? (socket80)
Разделение по принципу - это хорошо, осталось придумать сколько картинок складывать в одну директорию - не больше 1000 или 10.000, тоесть определиться с оптимальным количеством.
 

tony2001

TeaM PHPClub
а при таком принципе ты никак не отследишь кол-во картинок.
поэтому планировать принцип деления надо заранее, исходя из предполагаемых объемов.
 

Rezec

По пиву? (socket80)
Автор оригинала: tony2001
а при таком принципе ты никак не отследишь кол-во картинок.
поэтому планировать принцип деления надо заранее, исходя из предполагаемых объемов.
Я думаю что надо исходить из возможностей фс. В этом случае подходит разбивка по айди.
 

si

Administrator
Я думаю что надо исходить из возможностей фс. В этом случае подходит разбивка по айди.
или подождать Reiser4 ;)

+ It can handle really large directories, because its search
+ algorithms are logarithmic with size not linear. With Reiser4 you
+ should use subdirectories because they help YOU, not because they
+ help your filesystem's performance, or because your filesystem won't
+ be able to shrink a directory once you have let it grow. For squid
+ and similar applications, everything in one directory should perform
+ better.
 

Rezec

По пиву? (socket80)
А этот рейзер поддерживается ядром по умолчанию?
 

Rezec

По пиву? (socket80)
По крайне мере в мане по моунт есть упоминание
 

goodwarlock

Guest
А зачем делить по какому-то принципу? Создавать папки по порядку 1, 2, 3 и т.д. и кидать в них фотки. Как только в папке больше 1000 фото, создаем следующую папку и т.д.
А в базе хранить путь к фотке и все ok. Пока фоток меньше миллиона. :)
А Reiser все-таки сыроват еще IMHO. Слетает иногда.
 

si

Administrator
А Reiser все-таки сыроват еще IMHO. Слетает иногда.
читать надо внимательно, я как раз и написал что надо ПОДОЖДАТЬ ;)

делить по вашену принципу достаточно сложно и медлено, гораздо проще и быстрее делать как предложили выше.
 

Rezec

По пиву? (socket80)
Автор оригинала: goodwarlock
А зачем делить по какому-то принципу? Создавать папки по порядку 1, 2, 3 и т.д. и кидать в них фотки. Как только в папке больше 1000 фото, создаем следующую папку и т.д.
А в базе хранить путь к фотке и все ok. Пока фоток меньше миллиона. :)
А Reiser все-таки сыроват еще IMHO. Слетает иногда.
Для того чтобы это нормально работало - надо как то узнавать кол-во картинок в директории, а это уже тормоза. Поэтому нужен алгоритм.
 

goodwarlock

Guest
А количество картинок в папке узнается sql запросом к базе фоток, или можно где-то запоминать, необязательно же считать каждый раз. Зато количество картинок в папке будет равномерным.
А ждать Reiser4 до осени как минимум. ;-) Вот только какого года?
 

Rezec

По пиву? (socket80)
ReiserFs однозначно отпадает - забыли. При аплоуде картинки в базе можно завести счетчик - это для того чтобы в одной директории было примерно одинаковое кол-во.
 

si

Administrator
предлагаю прекратить изобретать велосипед и сделать как предложил тони много постов назад.
 

Bee

Guest
ИМХО как tony предложил это не совсем хорошо: (при всем уважении конечно! ;) )

директории типа /da/ могут забиться что называется "под завязку", а в дирах /zq/ будет два-три файлика болтаться...

имхо лучше действительно по id:
/1000/ для 0001 - 1000
/2000/ для 1001 - 2000
/3000/ для 2001 - 3000

и т.д. в этом случай загрузка директорий файлами будет равномерной.
 

php_newbie

Guest
учите матчасть

Автор оригинала: tony2001
с reiserfs ничего не должно быть, т.к. она под это оптимизирована.
остальные скорее всего будут конкретно тормозить.
а вообще, такие вещи обычно бьют на директории примерно по такому принципу:

.../pictures/t/to/tony2001.jpg
.../pictures/s/so/somebody_else.jpg
возьми 3й томик старика Кнута и пройдись по разделу "хеш функции". они для этого и приспособлены, при чем по определению обеспечивают равномерность распределения хешированных объектов.
 

tony2001

TeaM PHPClub
>директории типа /da/ могут забиться что называется
>"под завязку", а в дирах /zq/ будет два-три файлика
>болтаться...
если кто-то не понял, то я, естественно, не выдумывал этот алгоритм, а "перенял" с SourceForge.
там он применяется не для картинок, но принцип тот же.

кроме того, никто не говорил о том, что картинки будут иметь осмысленные названия.
если это будет какой-нить md5, то распределение будет равномерным.

в свете двух предыдущих фактов, мне этот принцип кажется достаточно эффективным.

>возьми 3й томик старика Кнута и пройдись по
>разделу "хеш функции". они для этого и
>приспособлены, при чем по определению
>обеспечивают равномерность распределения
>хешированных объектов.
если вы такой умный, то что ж вы строем не ходите?
где же ваш вариант построения подобной системы?
 
Сверху