Так может залочить таблицу/колонку на чтение перед выполнением обоих запросов?
2012/8/5 Alexandr Alexeev <[email protected]>: > Если позволите, я хотел бы обратиться за помощью в вопросе, который > имеет _очень_ посредственное отношение к 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 > [email protected] | http://moscow.pm.org -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
