Увеличение лимита в 32К подкаталогов

M
На сайте с 22.02.2007
Offline
161
#41
VF:
Или вариации на тему - 00/00/0001. По 100 поддиректорий верхних уровней и до 100 млн. без одного возможных пользователей. В общем, стоит подумать как реализовывать перед тем как напролом править файловую систему :)

Да, действительно - просто и эффективно. Тем более что в nginx потребовалось добавить всего одну строчку:

rewrite   "^/users/([0-9]{2})([0-9]{2})([0-9]{4})/(.*)$" /users/$1/$2/$3/$4 last;

Думаю лимит на 100 мл. пользователей хватит :)

Спасибо всем большое, за проявленную помощь и потраченное время. Очень признателен.

Торрент Трекер Катушка - скачать фильмы (http://katushka.net) | SmartProgress - достижение целей (https://smartprogress.do/) Партнерская программа SmartProgress (https://smartprogress.do/affiliate)
izbushka
На сайте с 08.06.2007
Offline
110
#42
maxttor:
Тем более что в nginx потребовалось добавить всего одну строчку:

Не забывайте, что nginx только отдает. Тот кто ложит тоже должен соблюдать подобную логику ;)

M
На сайте с 16.09.2009
Offline
278
#43
Andreyka:
Тоесть ты знаешь чем это грозит, но молчишь?

Ну, я же читаю тред, перед тем как писать - и знаю что автора уже предупредили о потенциальных проблемах с таким решением.

К тому же, наверняка dir_index включен для файловой системы. Вы можете предложить пример потенциальной проблемы на его типе нагрузки - что не вылечит dir_index для (удовлетворившей ТС оценки в) 100 млн. пользователей?

izbushka:
Не забывайте, что nginx только отдает. Тот кто ложит тоже должен соблюдать подобную логику ;)

А еще, то что _уже лежит_ - нужно преобразовать к соответствующей логике.

Вот я и говорю, что это не минутное решение, в отличие от изменения формата файловой системы.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
M
На сайте с 22.02.2007
Offline
161
#44

Вот накидал скриптик на php для переноса данных:


$users = sql_query("SELECT `id`
FROM `users`
ORDER BY `id` ASC", 1);
$id_format = '00000000';
for ($i = 0; $i < count($users); $i++) {
echo $users[$i]['id']."\n";
$full_id = substr($id_format, 0, strlen($id_format) - strlen($users[$i]['id'])).$users[$i]['id'];
$path = preg_replace('/^(\d{2})(\d{2})(\d{4})$/', '$1/$2/$3', $full_id);
$dir = explode('/', $path);
$id_dir = '';
for ($j = 0; $j < count(dir); $j++) {
$id_dir .= $dir[$j].'/';
if (!file_exists(ROOT_PATH.'/users1/'.$id_dir))
mkdir(ROOT_PATH.'/users1/'.$id_dir);
}
$files = glob(ROOT_PATH.'/users/'.$users[$i]['id'].'/*.*', GLOB_BRACE);
for ($j = 0; $j < count($files); $j++) {
$filename = pathinfo($files[$j]);
copy($files[$j], ROOT_PATH.'/users1/'.$path.'/'.$filename['basename']);
}
}
I
На сайте с 23.12.2010
Offline
25
#45

что-то не уверен я что мд5 хорошее решение.

что проще, открыть файл в 32К строчек и прошерстить его в поисках искомого или мд5 посчитать? сильно подозреваю что легче искать чем считать при таких исходных данных.

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

в базе надо хранить большое количество картинок, в нереляционной. что-нибудь из серии BigTables.

Andreyka
На сайте с 19.02.2005
Offline
822
#46

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

Впрочем ТС уже так и сделал.

Не стоит плодить сущности без необходимости
I
На сайте с 23.12.2010
Offline
25
#47

Andreyka,

то что сделал ТС работать будет медленнее просто потому что открытие директории в тысячи раз медленнее чем сравнение

izbushka
На сайте с 08.06.2007
Offline
110
#48

iopiop, От директорий все-равно никуда не уйти: ты же не будешь хранить все 100кк юзеров в одной директории?

I
На сайте с 23.12.2010
Offline
25
#49
izbushka:
iopiop, От директорий все-равно никуда не уйти: ты же не будешь хранить все 100кк юзеров в одной директории?

Как я написал выше - в базе. И директорий нет - файл-то один, и искать базы умеют ну очень быстро

Если уж это совсем невозможно, то хотя бы не увлекаться глубиной вложения

Andreyka
На сайте с 19.02.2005
Offline
822
#50
iopiop:
Andreyka,
то что сделал ТС работать будет медленнее просто потому что открытие директории в тысячи раз медленнее чем сравнение

По мотивам анекдота:

Они кешируются, чувак. Они кешируются.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий