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

Akzhan Abdulin akzhan.abdulin на gmail.com
Вс Авг 5 03:15:15 PDT 2012


На самом деле блокировка таблиц, - не наш метод.

Задача у вас другая. Не выбрать 100 записей. а пометить 100 записей для
выполнения.

Для этого лучше ввести понятие метки (поле mark_for_extraction, null,
хранит, например, ip машины плюс pid процесса, который помечает записи для
вытаскивания).

Тогда задача сделать UPDATE SET mark = $mymark WHERE mark IS NULL AND
$your_conditions;

А уже потом делаете SELECT WHERE mark = $mymark;

Это так, мысли вслух. Вариантов много. Блокировка - худший возможный из них.


5 августа 2012 г., 11: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
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120805/ebf0bfce/attachment-0001.html>


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