Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Запустался. Не могу разобраться с пауком.


Автор: dEEp 29.8.2014, 17:25
Приветы

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

У меня есть crawler, который достаёт из базы URL адрес до медицинской карточки, идёт собственно туда, делает что делает и на этом всё. И вот тут две тонкости:
а) ресурс с картотекой должен принимать не более 1 запроса в 2 секунды.
б) каждая карточка (запись в БД с URL и т.д.) имеет некий рейтинг: 1 и 2

Так воооттт... Crawler каждые 2 секунды шлёт 1 запрос. Берёт из БД запись и пошёл. Когда закончил - делает отметку, что счётчик проверки данной записи увеличился на 1. 

Что хочу сделать.. Мне хочется, чтобы те карточки, которые имели высший рейтинг - проверялись парсером чаще. Ну например чтобы за 10 секунд 3 раза проверились записи с рейтингом 1, а 2 раза чтобы с 2. Или как-то так.

Штука ещё в том, что записей с рейтингом 1 около 100 штук, а записей с рейтингом 2 - около 1000. 


Я думал на тему того, чтобы запускать отдельный crawler для каждого рейтинга, но тогда сложно их синхронизировать. Т.е. чтобы учитывалось требование об одном запросе в две секунды. 

Есть у вас какие-то мысли? С радостью обдумаю все варианты, потому что сам уже что-то не але(

Автор: ksnk 29.8.2014, 19:27
Отдельная таблица - очередь.
Выковыриваешь все записи с рейтингом 1 и с рейтингом 2.
перебираешь записи с рейтингом 1 по кругу. выбрать 3 записи первого рейтинга и 2 второго, вставить все 5 в таблицу заданий, и так далее, пока не кончатся все задания 2 рейтинга. По исчерпании очереди - повторить.

Автор: dEEp 29.8.2014, 19:30
Хмм... Согласен, как вариант использовать доп.таблицу. Если честно, то даже не рассматривал такой вариант. Тысяча записей не много, но тыркать их каждые 2 секунды не хотелось. Но да, если сделать таблицу с заданиями, то это вполне решает проблему.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)