Помогите написать алгоритм индексации / анализа ограниченного куска данных при запуске cron - PullRequest
0 голосов
/ 05 августа 2011

Вот ситуация. Я очищаю веб-сайт, чтобы получать данные из его статей, используя страницу роботов, предоставленную этим веб-сайтом (список URL-адресов, указывающих на каждую статью, размещенную на сайте). Пока что я выполняю слияние с базой данных, чтобы «вставить» URL-адреса в мою таблицу. Я знаю, что каждый цикл проверки займет много времени, потому что нужно проанализировать более 1400 статей. Мне нужно написать алгоритм, который будет одновременно выполнять только небольшую часть задач в cron, чтобы он не перегружал мой сервер и т. Д.

Edit: я думаю, я должен упомянуть, что я использую drupal 7. Кроме того, это должен быть постоянный скрипт, который происходит со временем, я не очень беспокоюсь о времени, которое требуется для первоначального заполнения базы , Страница роботов является динамической, URL-адреса добавляются туда периодически по мере добавления статей. В настоящее время я использую hook_cron () для этого, но я открыт для лучших методов, если есть что-то лучшее для этого.

Ответы [ 3 ]

1 голос
/ 06 августа 2011

Вы можете использовать API операций с очередями Drupal , чтобы ставить каждую страницу в очередь как элемент очереди.Вы можете, но не обязательно, объявить свою очередь как выполненную cron.Затем Drupal позаботится о выполнении как можно большего количества элементов очереди при каждом запуске cron без достижения заявленного максимального времени выполнения очереди.

См. aggregator_cron для примера элемента en-queuing.И aggregator_cron_queue_info для объявления, которое позволит Drupal обрабатывать эти элементы в очереди во время его cron.

Если обработка очереди во время обычного Drupal cron является проблемой, вы можете обрабатывать свою очередь независимо с помощьюсправка таких модулей, как Очередь ожидания или Интеграция Beanstalkd .

0 голосов
/ 05 августа 2011

Итак, у вас уже есть URL в вашей базе данных. Есть столбец состояния в этой таблице - очищен или нет. Крон может срабатывать каждый раз, захватывая следующий URL, который не был соскоблен со стола, и помечая его как соскоб.

0 голосов
/ 05 августа 2011

Скорее всего, издержки http при загрузке каждой статьи значительно превысят затраты на выполнение операций с базой данных.Только не загружайте слишком много статей параллельно, и все будет в порядке.Большинство веб-мастеров недовольны скребками, особенно когда они делают 10, 20, 500+ параллельных выборок.

...