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

Andrei andrei.protasovitski на gmail.com
Вс Авг 5 04:21:28 PDT 2012


Ну, чтобы про Perl было:

http://search.cpan.org/~msantos/Data-Consumer-0.13/lib/Data/Consumer.pm

И для MySQL:

http://search.cpan.org/~msantos/Data-Consumer-0.13/lib/Data/Consumer/MySQL.pm

Фактически реализация пометки записей.

5 августа 2012 г., 9:24 пользователь Alexandr Alexeev
<afiskon на gmail.com>написал:

> Если позволите, я хотел бы обратиться за помощью в вопросе, который
> имеет _очень_ посредственное отношение к 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 например.
>
> Как бы вы посоветовали решить проблему?
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
Andrei Protasovitski
< andrei[dot]protasovitski[at]gmail[dot]com >
Diemen, Netherlands
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120805/a48b1bbb/attachment.html>


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