nixp.ru v3.0

18 октября 2017,
среда,
01:35:33 MSK

DevOps с компанией «Флант»
Аватар пользователя Дмитрий Шурупов
Дмитрий Шурупов написал 10 апреля 2004 года в 20:11 (502 просмотра) Ведет себя как фрик; открыл 670 тем в форуме, оставил 5688 комментариев на сайте.

Пишу на Perl’е поисковик по FTP-серверам. Использую Net::FTP.

Проблема следующая: при индексации нужно помимо названий файлов/каталогов узнавать их размер. Два найденных мною способа решения этой задачи таковы: делать `ls -lA` или ls + смотреть $ftp->size($filename); для каждого элемента. Второй по понятным причинам очень не оптимален, но первым сложен тем, что при `ls -lA` на каталог, в котором, скажем, 3.000 файлов, начинается жуткий резкий скачок выделяемых на мой indexer ресурсов удаленного компьютера, требуемых для вывода такого количества информации. Кое-как такую ситуацию пытаюсь тушить sleep(); с количеством секунд в зависимости от количества про-ls-енных элементов. Это позволяет избежать дальнейшей нагрузки из-за большого наплыва запросов ls, но не решает проблему периодических скачков (при ls на объемные каталоги).

Есть ли идеи, как таких скачков избежать?

Т.е., например, как-то (как?!) делать ls на первые X элементов каталога, затем (после sleep();) листить с X-ного по 2X-ный и т.п. Была идея с узнаванием примерного кол-во элементов каталога из этого самого `ls -lA`, но на Win-платфрмах для каталогов размер всюду ставится равным нулю.

У меня сейчас стоит примерно так:

if ($elements>1024){ sleep(5); } elsif ($elements>512){ sleep(3); }
elsif ($elements>64){ sleep(2); } elsif ($elements>4) { sleep(1); }

Очень долго подбирал значения: эти позволяют индексировать все практически совершенно безболезненно.

Genie

Сперва пробовать прочитать файлик ls-lR.gz, если он есть (например, как на ftp://ftp.chg.ru/ и множестве других)

Скачивать его и разбирать.

Для тех же ftp-серверов, что это не поддерживают, через некоторое время, после двух-трёх раз дикой нагрузки простого сканирования — либо закроют доступ, либо выложат такой же файлик. Можно, предварительно письмом попросить создавать такой файлик.

Дмитрий Шурупов

Таких файликов нет, и создавать их никто не будет.

Поиск рассчитан на локальные ftp, где 99.8% (остаток — это я) серверов под Windows.

Доступ закрывать тоже не будут. Эта нагрузка фактически не заметна. Поэтому я пока решил оставить все, как есть. Жалоб не поступало.

Genie

над локальными серверами я, в своё время, издевался….

после коннекта спрашивал `ls -aFlR`.

Сервер думал-думал, после чего отдавал мегабайтный лог. разом

anonymous

в своей локлаке я сделал по второму способу через базу mysql, т.е. я запускаю скрипт он соед с сервером, делаем $ftp->ls сохраняем результат в бд, потом при помощи foreach узнаём размер, дальше снова листим ($ftp->($file)) снова узнаём размер… вроде правильно объяснил… давно это было, теперь в локалке люди пользуются поиском по муз серверу через веб фэйс

anonymous

2 Shurup

сорри, если не совсем в тему…

пишу ftp-поисковик на перле (бакалаврат)

если есть по етому делу инфа, подкиньте плз на мыло….