Здравствуйте, 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:[email protected] -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
