跳过锁定在 mariaDB 中的替代方法
Alternative to skip locked in mariaDB
在 mariaDB 中是否有替代 FOR UPDATE SKIP LOCKED
的良好且高效的方法?或者有什么好的做法可以在 mariaDB 中实现作业排队?
不使用锁来指示正在处理的队列记录,而是使用索引的 processing
列。对于新记录将其设置为 0,并且在与任何处理分开的事务中,select 单个尚未处理的记录并将其更新为 1。可能还存储时间和进程或线程 ID 以及正在处理的服务器记录。有一个单独的监视进程来检测标记为正在处理但未在预期时间内完成处理的作业。
一种甚至可以避免对 select 记录所需的 non-primary 索引临时锁定的替代方法是使用单独的 non-database 消息队列来通知您有可用的新记录在数据库队列中。 (除非你永远不会关心一个工作单元是否被多次处理,否则除了任何 non-database 队列之外,我总是会使用数据库 table。)
从 QUEUE_TABLE 中删除,限制 1 返回 *
用于出列操作。根据您的需要,它可能工作正常
在 mariaDB 中是否有替代 FOR UPDATE SKIP LOCKED
的良好且高效的方法?或者有什么好的做法可以在 mariaDB 中实现作业排队?
不使用锁来指示正在处理的队列记录,而是使用索引的 processing
列。对于新记录将其设置为 0,并且在与任何处理分开的事务中,select 单个尚未处理的记录并将其更新为 1。可能还存储时间和进程或线程 ID 以及正在处理的服务器记录。有一个单独的监视进程来检测标记为正在处理但未在预期时间内完成处理的作业。
一种甚至可以避免对 select 记录所需的 non-primary 索引临时锁定的替代方法是使用单独的 non-database 消息队列来通知您有可用的新记录在数据库队列中。 (除非你永远不会关心一个工作单元是否被多次处理,否则除了任何 non-database 队列之外,我总是会使用数据库 table。)
从 QUEUE_TABLE 中删除,限制 1 返回 *
用于出列操作。根据您的需要,它可能工作正常