Ну, чтобы про Perl было:<br><br><a href="http://search.cpan.org/~msantos/Data-Consumer-0.13/lib/Data/Consumer.pm">http://search.cpan.org/~msantos/Data-Consumer-0.13/lib/Data/Consumer.pm</a><br><br>И для MySQL:<br><br><a href="http://search.cpan.org/~msantos/Data-Consumer-0.13/lib/Data/Consumer/MySQL.pm">http://search.cpan.org/~msantos/Data-Consumer-0.13/lib/Data/Consumer/MySQL.pm</a><br>
<br>Фактически реализация пометки записей.<br><br><div class="gmail_quote">5 августа 2012 г., 9:24 пользователь Alexandr Alexeev <span dir="ltr"><<a href="mailto:afiskon@gmail.com" target="_blank">afiskon@gmail.com</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Если позволите, я хотел бы обратиться за помощью в вопросе, который<br>
имеет _очень_ посредственное отношение к Perl.<br>
<br>
Есть база, в базе хранятся задачи, задачи объединяются в группы. Схема<br>
БД примерно такая - в табличке groups хранится group_id, group_desc и<br>
last_task_id, а в табличке tasks - task_id, group_id и<br>
task_description. При выборке очередной порции заданий выполняются<br>
такие запросы:<br>
<br>
SELECT * FROM tasks WHERE group_id =$group AND task_id > $start ORDER<br>
BY task_id LIMIT 100;<br>
UPDATE groups SET last_task_id =<br>
$максимальный_id_полученный_в_пред_запросе WHERE group_id = $group_id;<br>
<br>
Проблема заключается в том, что если почти одновременно начать<br>
выполнять эти запросы, будут получены одни и те же задачи.<br>
<br>
Один из способов решения этой проблемы заключается в введении<br>
специальной таблички mutex, которая будет лочится на время выполнения<br>
запроса. Но этот способ плох хотя бы тем, что он не позволяет выбирать<br>
задачи одновременно из нескольких групп. Также можно поднять сервер<br>
блокировок (сойдет Memcached или Redis). Или просто переписать все и<br>
использовать ZeroMQ например.<br>
<br>
Как бы вы посоветовали решить проблему?<br>
<span class="HOEnZb"><font color="#888888">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br>Andrei Protasovitski<br>< andrei[dot]protasovitski[at]gmail[dot]com ><br>Diemen, Netherlands<br>