首页 > 解决方案 > 在 MariaDB 中跳过锁定的替代方案

问题描述

FOR UPDATE SKIP LOCKED在 mariaDB 中是否有任何好的和高性能的替代方案?或者有什么好的做法可以在 mariaDB 中归档工作队列?

标签: mysqlmariadbmessage-queue

解决方案


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

避免选择记录所需的非主索引上的临时锁定的替代方法是使用单独的非数据库消息队列来通知您数据库队列中可用的新记录。(除非您不关心一个工作单元是否被多次处理,否则除了任何非数据库队列之外,我总是会使用数据库表。)


推荐阅读