[Moscow.pm] Получение задач из РСУБД

Denis Evdokimov evdokimov.denis на gmail.com
Вс Авг 5 03:26:31 PDT 2012


Как-то давно решал схожую задачу.
Сначала делал UPDATE таблицы, а потом выбирал нужные записи.
UPDATE jobs SET worker=$worker WHERE worker='' AND ....;
SELECT ... WHERE worker=$worker;

После выполнения пачки заданий выставлял им статус "выполнено"
+ нужен механизм, который освобождает взятые, но не сделанные задачи.

05.08.2012 13:56 пользователь "Михаил Монашёв" <postmaster на softsearch.ru>
написал:
>
> Здравствуйте, Alexandr.
>
> > Если позволите, я хотел бы обратиться за помощью в вопросе, который
> > имеет _очень_ посредственное отношение к Perl.
>
> > Есть база, в базе хранятся задачи, задачи объединяются в группы. Схема
> > БД примерно такая - в табличке groups хранится group_id, group_desc и
> > last_task_id, а в табличке tasks - task_id, group_id и
> > task_description. При выборке очередной порции заданий выполняются
> > такие запросы:
>
> > SELECT * FROM tasks WHERE group_id =$group AND task_id > $start ORDER
> > BY task_id LIMIT 100;
> > UPDATE groups SET last_task_id =
> > $максимальный_id_полученный_в_пред_запросе WHERE group_id = $group_id;
>
> > Проблема заключается в том, что если почти одновременно начать
> > выполнять эти запросы, будут получены одни и те же задачи.
>
> > Один из способов решения этой проблемы заключается в введении
> > специальной таблички mutex, которая будет лочится на время выполнения
> > запроса. Но этот способ плох хотя бы тем, что он не позволяет выбирать
> > задачи одновременно из нескольких групп. Также можно поднять сервер
> > блокировок (сойдет Memcached или Redis). Или просто переписать все и
> > использовать ZeroMQ например.
>
> > Как бы вы посоветовали решить проблему?
>
> http://dev.mysql.com/doc/refman/4.1/en/lock-tables.html
>
> --
> С уважением,
>  Михаил                          mailto:postmaster на softsearch.ru
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120805/ea893d77/attachment.html>


Подробная информация о списке рассылки Moscow-pm