Генерировать или нет? Вот в чем вопрос...

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
gto23
Сообщения: 67
Зарегистрирован: 2013.06.08, 22:03

Генерировать или нет? Вот в чем вопрос...

Сообщение gto23 »

Добрый день форумчане, прошу прощения за большое количество тем в один день, но вопрос уже иного характера, так что новая тема...Ситуация: сохраняю изображения на сервере. В папке с одним альбомом может быть несколько изображений, альбом имеет ID. Чтобы снизить нагрузку на диск, решил сделать распределение по папкам. То есть:
ID=1 путь - 'upload/1/1/'
ID=123 путь - 'upload/2/123/'
ID=12345 путь - 'upload/124/12345/'
алгоритм нахождения пути по ID

Код: Выделить всё

$ID=12345;
$group=ceil($id/100);
$targetPath='upload/'.$group.'/'.$id.'/';
//в итоге $targetPath='upload/124/12345/'
//При количестве альбомов до 100к, количество папок на первом уровне не превысит 1000, на втором 100.
Конечно, понимаю, что при таком варианте после определенного количества альбомов придется делать перераспределение, но пока лучшего выхода не нахожу. Так вот, вопрос, есть ли способ лучше и как поступить с папками, создавать их каждый раз динамически или нагенерировать в папке upload эти 100к папок заранее?
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение vladikamira »

чего у Вас за трава, поделитесь)


чем по вашему будет отличаться с точки зрения файловой системы путь такого вида от того что вы делаете, кроме как ни чем? )

/upload/album_id/image_id
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение rak »

все правильно человек делает, есть ведь ограничения в файловых системах на кол-во папок
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение SiZE »

gto23 писал(а):Чтобы снизить нагрузку на диск, решил сделать распределение по папкам. То есть:
ID=1 путь - 'upload/1/1/'
Если у тебя будет 1000 папок, они пустые могут гигабайт весить. =) Тут немного обсудили эту тему
Последний раз редактировалось SiZE 2013.07.10, 12:32, всего редактировалось 1 раз.
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение vladikamira »

rak писал(а):все правильно человек делает, есть ведь ограничения в файловых системах на кол-во папок
Да действительно, на один уровень отличие.
И какое это ограничение, если не секрет? Не берем в расчет ограничение хотсера.

Мне прям интересно стало) Сейчас попробую хостинге проверить производительность со 100к папкам если получиться....

>Так вот, вопрос, есть ли способ лучше и как поступить с папками, создавать их каждый раз динамически или нагенерировать в папке upload эти 100к папок заранее?
т.е. считаете что при вашем алгоритме, создание нового каталога альбома, будет медленно работать?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение SiZE »

vladikamira писал(а):И какое это ограничение, если не секрет?
http://habrahabr.ru/post/152193/
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение rak »

vladikamira писал(а):
rak писал(а):все правильно человек делает, есть ведь ограничения в файловых системах на кол-во папок
Да действительно, на один уровень отличие.
И какое это ограничение, если не секрет? Не берем в расчет ограничение хотсера.

Мне прям интересно стало) Сейчас попробую хостинге проверить производительность со 100к папкам если получиться....

>Так вот, вопрос, есть ли способ лучше и как поступить с папками, создавать их каждый раз динамически или нагенерировать в папке upload эти 100к папок заранее?
т.е. считаете что при вашем алгоритме, создание нового каталога альбома, будет медленно работать?
например вот http://superuser.com/questions/66331/wh ... r-in-linux
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение vladikamira »

SiZE писал(а):
vladikamira писал(а):И какое это ограничение, если не секрет?
http://habrahabr.ru/post/152193/
95:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 20G 9.3G 11G 47% /
tmpfs 512M 0 512M 0% /lib/init/rw
tmpfs 512M 0 512M 0% /dev/shm
95:~#
95:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/simfs 800000 103365 696635 13% /
tmpfs 131072 5 131067 1% /lib/init/rw
tmpfs 131072 1 131071 1% /dev/shm


реально могут индексные дескрипторы закончиться, это ж напрямую зависит от размера партиции, судя по всему.
И сходя из логики алгоритма формирование путей как описано у ТС, без разницы все ровно! кол-во inode-ов все ровно будет расти!
Единственное отличие от простого хранение, как я описал, будет в том что posix readdir() будет заметней медленней работать, да и на прямое обращение к файлу, тоже может сказаться!
vladikamira
Сообщения: 92
Зарегистрирован: 2013.01.11, 23:13

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение vladikamira »

Уххх я чего то зачитался про все это)))

Вопрос к gto23, у вас вообще какая ОС планируется использоваться и какая файловая система?
gto23
Сообщения: 67
Зарегистрирован: 2013.06.08, 22:03

Re: Генерировать или нет? Вот в чем вопрос...

Сообщение gto23 »

Полная неизвестность, нужен универсальный вариант, который, прикрыл бы тыл..Отвечаю на вопросы. 1) Думаю ли я, что мой алгоритм будет медленно отрабатывать? - нет, не думаю, генерировать заранее хочу, чтобы не делать лишнюю дисковую операцию, элементарную конечно, но все же лишнюю 2) Чем такой путь ('upload/album_id/imageid') отличается от моего? - отличается тем, что при количестве альбомов 100к, у вас на первом уровне будет 100к папок, а у меня всего тысяча. Я не представляю механизмов работы различных серверных ОС с файловой системой, потому вопрос и тут, на форуме...Лично мне кажется, что осуществить поис в списке папок из 100к труднее, нежели, осуществить поиск 1 раз по списку в 1000 папок, и второй, по списку в 100 папок. Я не прав? Объясните почему, будьте добры. Механизм не последовательный? Есть какие-то хитрости? Просвятите. Хотя бы на том уровне, на каком сами представляете, буду благодарен за любые сведения
Ответить