On Mon, Sep 7, 2009 at 8:18 PM, Allen Fowler<allen.fow...@yahoo.com> wrote:
> Hello,
>
> I need to create a system where records are generated by a "producer" process 
> and processed by several "worker" processes.
>
> I was thinking about something like:
>
> Producer:
> 1) Producer INSERTs new records with "state" = "new" & "worker" = "null"
> 2) Producer sleeps and loops back to step #1
>
> Worker(s):
> 1) Worker UPDATEs all records with "worker" = "pid" & "state" = "working" 
> where "state" == "new"
> 2) Worker SELECTs all records where "worker" = "pid" & "state" = "working"
> 3) For each record that is done, worker updates record with "state" = "done"
> 4) Worker loops back to step #1
>
> Note: In this scheme the worker winds up with all "new" records generated 
> since the last worker claimed any. Not sure how else to guarantee atomicity. 
> I would prefer "only n records per request". Ideas?
>bly using python...)
>
> Thank you,
> :)


Assuming you are using MYISAM tables, all you really need to do is (a)
use a LOCK TABLE before the first UPDATE statement and UNLOCK TABLES
after, and (b) put a LIMIT clause on the UPDATE statement.  Other than
that, what you outlined is exactly what I do for a very similar
process, although right now I only have one "worker" process, but if I
wanted to add more, it's already built to handle that.

-Hank

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to