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

Михаил Монашёв postmaster на softsearch.ru
Вс Авг 5 02:56:20 PDT 2012


Здравствуйте, 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