2012-06-01 5 views
2

У меня есть таблица в моей базе данных MySQL, содержащая 200 тыс. Записей. Каждая запись содержит URL-адрес, который должен быть обработан каким-либо образом. Обработка URL-адресов в моем случае не является тривиальной задачей, поэтому я решил использовать очередь Gearman для их запуска в качестве фоновых заданий.Как реализовать круговой список задач с Gearman?

Итак, для каждой записи (URL) в моей таблице я планирую создать отдельную задачу и передать ее Gearman.

Кроме того, данные в моей таблице не являются статическими, и очень часто сюда добавляются новые URL-адреса.

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

Так мои вопросы:

  • как лучше задач снабжения в Gearman в этом случае?
  • Должен ли я использовать cron или можно организовать логику, где Gearman автоматически потянет задачи?
  • Сколько задач может быть представлено за один раз Gearman?

Итак, не могли бы вы рассказать мне, как лучше всего реализовать эту систему?

ответ

3

Звучит так, что вам нужна очередь, где обработанные элементы добавляются обратно в нижнюю часть очереди. Я предлагаю организовать рабочий процесс так:

  1. После того, как новый URL появляется в вашей системе, добавьте его в Gearman очереди фон работы.

  2. В реализации рабочего процесса Gearman, после обработки задания, снова добавьте его в очередь.

Таким образом, вы будете постоянно обрабатывать URL-адрес в порядке их добавления в очередь и всю очередь будет бесконечно повторной. Это предполагает, что вы многократно выполняете одну задачу, конечно.

Если задано более 1 задачи (например, сначала выполните задачу №1 по всем URL-адресам, затем выполните задачу № 2 и т. Д.), Вы можете следовать аналогичной схеме, просто отправьте задания во вторую очередь (например, другой рабочий) после первой задачи. Затем, в зависимости от того, как именно вы хотите заказать работу, вы либо увидите, что все произойдет автоматически (если оба работника всегда доступны для просмотра), либо вам нужно будет следить за очередью # 1 и запускать только рабочий №2, когда он пуст , Для получения подробной информации о таком мониторинге см. Any way to access Gearman administration?

В общем, Gearman может легко и быстро обрабатывать 200 000 предметов. Теперь использование постоянной очереди немного замедлит работу (это, по сути, соединение MySQL/другое БД), но не должно делать ничего ужасного. Я сам не пробовал, но истории успеха обычно включают в себя еще больше предметов и часто постоянную очередь.

Единственное, что вам нужно знать, это то, что Gearman не разрешает обработку заданий партиями (например, 10 элементов одновременно). Когда вы обрабатываете URL-адреса, это означает, что вам нужно будет обрабатывать 1 URL за раз, что дорого, так как вам придется ждать, пока каждый из них будет загружен отдельно.Вы можете избежать этого либо с помощью языка программирования, управляемого событиями, либо без блокировки для обработки, либо вы можете взглянуть на beanstalkd, что позволяет такую ​​пакетную обработку.

+0

благодарит за ваше подробное решение! Еще один вопрос: следует ли использовать постоянную очередь передач, и это большая проблема, чтобы иметь 200000 задач для него в очереди? – alexanoid

+0

@alexanoid см. Мои ответы на изменения - в общем, не должно быть никаких проблем. – Aurimas

+0

большое спасибо! – alexanoid

 Смежные вопросы

  • Нет связанных вопросов^_^