Recent submissions

Comment · 1 year ago
Interesting lib!

Graphile Worker: PostgreSQL only

Sidequest: Multiple backends (PostgreSQL, MySQL, SQLite, MongoDB)

Graphile Worker: No built-in dashboard - you need external monitoring

Sidequest: Comprehensive built-in web dashboard for job monitoring

Graphile Worker: Single queue with job prioritization

Sidequest: Multiple queues with individual: i) Concurrency limits; ii) Priority levels; iii) State management (active/paused); iv) Isolated workloads.

Graphile Worker: Direct PostgreSQL integration, very lightweight

Sidequest: Worker threads for non-blocking processing, more comprehensive job lifecycle management

Graphile Worker: Optimized for PostgreSQL performance (3ms latency)

Sidequest: Balanced performance with rich feature set

I hope that helps answering your question.

Comment · 1 year ago
Well, you don't need to worry. Sidequest only locks the rows it's gonna use, i.e., the job rows it manages. Any other data in your DB is not touched by Sidequest, so you should be safe :)
Comment · 1 year ago
Well, Sidequest comes with a comprehensive built-in dashboard that provides real-time monitoring, job management, and performance analytics, so there's that.

You can probably deploy Sidequest a job processor for all your 20+ services. Each service can enqueue the jobs and you can run as many machines as you want with Sidequest just to run the jobs. You maintain the 12-factor principle - your services remain stateless and delegate scheduled work to Sidequest.

The only requirement here is that the scripts to be executed must be in the same path in all machines. As long as you follow that, you can deploy it and run your jobs :)

Comment · 1 year ago
Nice to know SQLite will be useful. Just be mindful that SQLite does not work well in highly concurrent systems. So, if you have a single job runner process, it will work wonderfully. However, if you have many workers, then you might see a few issues.
Comment · 1 year ago
Hello! One of the creators of Sidequest here.

Great question!

Sidequest uses transaction-level row locks (`SELECT ... FOR UPDATE SKIP LOCKED`) when fetching jobs. This means each worker thread only locks the specific job rows it’s about to process, minimizing lock contention and avoiding blocking other queries. This pattern is inspired by Oban’s advisory-lock approach, but instead of using explicit advisory locks, Sidequest relies on the database’s built-in row locking mechanism.

The only drawback is that Sidequest will require one or two connections to your DB. If you enqueue jobs from within other jobs, then each job that requests an enqueue will also connect to your DB (lazily connected upon request - if your job does not enqueue, no connection is created). However, you can configure the number of concurrent workers per queue and globally, so you control how much load Sidequest puts on your database.

I hope that answers your question :)

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton