Hacker News new | ask | show | jobs
by MattIPv4 1002 days ago
We process around 1 million events a day using a queue like this in Postgres, and have processed over 400 million events since the system this is used in went live. Only issue we've had was slow queries due to the table size, as we keep an archive of all the events processed, but some scheduled vacuums every so often kept that under control.
2 comments

Partial indexes might help.
Also: an ordered index that matches the ordering clause in your job-grabbing query. This is useful if you have lots of pending jobs.
Exactly. A partial index should make things fly here.
Active Queue table and then archive jobs to a JobDone table? I do that. Queue table is small but archive goes back many months
In modern PG you can use partitioned table for a similar effect.
We just have a single table, with a column indicating if the job has been taken by a worker or not. Probably could get a bit more performance out of it by splitting into two tables, but it works as it is for now.