在Postgres中实现互斥系统/分布式队列

时间:2019-06-14 21:28:23

标签: sql postgresql

我想在PostgreSQL中实现一个互斥系统,其中多个工作进程在处理表(队列)时会暂时锁定表(队列)中的资源(行)。如果工作进程崩溃,我希望干净地释放锁,而不必依赖另一个进程来清理泄漏的锁。

到目前为止,我想出的是在事务中使用SELECT ... FOR UPDATE SKIP LOCKED查询,该查询将锁定它找到的行,并跳过任何其他锁定的行。

它运作良好,但问题之一是工作人员可能需要一段时间才能完成任务,因此我需要在整个任务期间保持交易公开。

另一个问题是,工作程序需要增量工作,并将其状态持久保存到数据库中,这样,如果工作程序被停止或崩溃,它们便可以快速恢复到原来的状态。被锁定的行无法将它们的状态持久保存在同一表中(尽管我认为可以通过使用另一个表来持久保存状态来摆脱这种情况)。

我已经在Web上搜索了如何在SQL / PostgreSQL中实现信号灯或资源借用系统,但没有找到适合我的需求的东西。有没有使用PostgreSQL实现此目的的简单方法?

0 个答案:

没有答案
相关问题