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

fisher

накатила суть
>>имхо лучше действительно по id:
>>/1000/ для 0001 - 1000
>>/2000/ для 1001 - 2000
>>/3000/ для 2001 - 3000
>>и т.д. в этом случай загрузка
>>директорий файлами будет равномерной.

два цента: в некоторых случаях полезнее с остатком от деления id на некоторую "базу", например, для "базы"= 1000:
/n/ : {k*1000+n}, где n,k - целые, k>=0, 0<=n<1000 (id = k*1000+n)
то есть
/0/ 0,1000, 2000,...
/1/ 1,1001, 2001...
его можно скомбинировать, увеличив глубину дерева, например
/m/n : n,{k*1000+n}, m = (int)(id/(1000*1000))
это для гибкости в случае резкого роста числа картинок
 

tony2001

TeaM PHPClub
>>имхо лучше действительно по id:
<skip>
>>директорий файлами будет равномерной.
а что, с картинками этими никто не работает?
если они удаляются, то первые директории будут (почти)пустые через некоторые время.
кроме того, речь имхо идет об изначальном делении, а не о создании директорий в процессе.
 

fisher

накатила суть
2tony2001: так я о том же, как раз остаток от деления и может дать более равномерное распределение при все том же минимуме вычислительных затрат
 

kostik_y2k

Guest
не легче-ли сохранять картинки прямо в БД раз так много....
 

vad

Guest
А я почему то думал что файлы закачиваемые пользователем целесообразно переименовывать ибо что случится елси кто-то попытается закачать файл с названием которое уже существует в папке. Придется делать проверку и напрягать пользователя переименовывать файл. Или я ошибаюсь? (это к вопросу о разделении файлов по названию)
 

Demiurg

Guest
вообще то файл в любом случае переименовывается и кладется во авременнную папку. Если ты его переименовываешь обратно, в то, что было, то это не есть целесообразно.
 

Ramzes

Новичок
имхо, делается по такому принципу:

$id = 1123223;

$num = sprintf('%09d',$id);
$name =
$num[5] . '/'.
$num[6] . '/'.
$num[7] . '/'.
$num[8] . '/'.
$num . '.jpg';

echo $name; // print: 3/2/2/3/001123223.jpg

т.е. по id(последние четыре цыфры) мы всегда знаем путь и имя картинки. создать диры, дело техники
 

defresto

Guest
reiserfs - что за зверь, простите?

Варинат предложенный Рамзесом ИМХО реально оптимален при использовании ай-ди юзеров, поскольку достигается полностью равномерное распределение. Но если исходные данные это Ник юзера то делать запрос к базе, чтобы узнать его ай-ди абсолютно нецелесообразно.

Вот интересный момент оптимальноек кол-во файлов на папку. Есть мнения, что данное кол-во недолжно превышать 10 файлов, а дальше идёт прогрессирующее увеличение нагрузки на сервер. Когда кол-во файлов достигает 36к в одной папке то Линуксу это непонравиться явно.

При буквенном комбинировании мы однако вполне можем получить 10к вложенных папок в папке t/to/ при структуре t/to/tony/ имея всего лишь 100к изверей.... Не много ли это....
 

si

Administrator

defresto

Guest
Обсуживать некоторые могут....
Но вопрос загрузки штука важная....
 

kvn

programmer
ну не знаю, FreeBSD, в одной дире 29256 файлов - полет нормальный, не знаю много это или мало, но явно больше 10-ти..:)
 

Zeratul

Guest
первый же ответ tony2001:
--------------------------------
с reiserfs ничего не должно быть, т.к. она под это оптимизирована.
--------------------------------
согласен, не до конца прочитал. спасибо.
Ссылку нашел
 

AdminGorkyRu

Новичок
Автор оригинала: Bee
имхо лучше действительно по id:
/1000/ для 0001 - 1000
/2000/ для 1001 - 2000
/3000/ для 2001 - 3000
и т.д. в этом случай загрузка директорий файлами будет равномерной.
При такй способ хранения оптимален если кол-во картинок не изменяется. Иначе же при малейшем изменении папок которые находятся выше чем последняя, то этот алгоритм вызовет большое кол-во перепаковок. Т.е. если 10 папок, то удалив одну картинку из певой, то придется выполнить несколько тысячь операций копирования.

наиболее целечообразным вижу способ предложенный Тони.
 

fixxxer

К.О.
Партнер клуба
вариант Тони, с поправкой на использование md5() или подобной хэш-функции в случае неравномерного распределения, оптимален, имхо.
 

defresto

Guest
Автор оригинала: kvn
ну не знаю, FreeBSD, в одной дире 29256 файлов - полет нормальный, не знаю много это или мало, но явно больше 10-ти..:)
На каком кол-ве посетителей?
На маленькой посещаемости можно что угодно делать.
 

dub

Guest
Вопрос. Влияет ли на производительность то, как называются сами файлы внутри выбранной системы каталогов?
То есть, отличаются ли по производительности следующие распределения:

1)

/0/0123, 0647, 0923
/1/1378, 1498, 1920
...
/9/9267, 9539, 9622
/a/a143, a327, a583
...
/y/y221, y742, y865
/z/z327, z832, z894

2)

/0/123, 647, 923
/1/378, 498, 920
...
/9/267, 539, 622
/a/143, 327, 583
...
/y/221, 742, 865
/z/327, 832, 894

Суть вот в чем - если они не отличаются, то имя файлу можно присваивать соответствующее id (не добавляя букв), а распределять по каталогам равномерно.
 
Сверху