Hello All --

I have a simple queuing application written on top of postgres which I'm trying to squeeze some more performance out of.

The setup is relatively simple: there is a central queue table in postgres. Worker daemons do a bounded, ordered, limited SELECT to grab a row, which they lock by setting a value in the queue.status column. When the task is complete, results are written back to the row. The system is designed to allow multiple concurrent daemons to access a queue. At any one time, we expect 1-5M active items on the queue.

Now this design is never going to win any performance awards against a true queuing system like Active/Rabbit/Zero MQ, but it's tolerably fast for our applications. Fetch/mark times are about 1ms, independent of the number of items on the queue. This is acceptable considering that our tasks take ~50ms to run.

However, the writing of results back to the row takes ~5ms, which is slower than I'd like. It seems that this is because I need to to do an index scan on the queue table to find the row I just fetched.

My question is this: is there some way that I can keep a cursor / pointer / reference / whatever to the row I fetched originally, so that I don't have to search for it again when I'm ready to write results?

Thanks in advance for any pointers you can provide.

Brian

--
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance

Reply via email to