跳过锁定在mariaDB中的替代方法

问题描述

在mariaDB中,有没有FOR UPDATE SKIP LOCKED以外的其他优秀表现?还是有什么好的做法可以在mariaDB中归档工作队列?

解决方法

请使用索引的processing列,而不是使用锁来指示正在处理队列记录。对于新记录,将其设置为0,并在与任何处理分开的事务中选择一个未处理的记录并将其更新为1。可能还存储时间和进程或正在处理记录的线程ID和服务器。有一个单独的监视过程,以检测标记为在预期时间内未完成处理的作业。

甚至可以避免选择记录所需的非主索引的临时锁定的另一种方法是使用单独的非数据库消息队列来通知您数据库队列中可用的新记录。 (除非您永远不关心一个工作单元是否被多次处理,否则我将始终使用数据库表以及任何非数据库队列。)

,

从QUEUE_TABLE LIMIT 1个返回中删除*

用于出队操作。根据您的需求可能会正常运行