当前的情况是,我有一个可以使用一个SQL数据库水平扩展的应用程序。定期运行一个后台进程,但是我只希望一次调用一次此后台进程。我试图通过使用数据库行和锁定来实现此目的,但是我被卡住了。要求每天只能成功完成一个批处理作业。
当前,我有一个名为lock的表,该表具有三列:时间戳记,lock_id,状态。状态是一个枚举,具有三个值0 =未运行,1 =正在运行,2 =已完成。
问题在于,如果批处理作业失败且状态等于0,如何确保仅重试一个后台进程。如何保证重试方案中仅运行一个后台进程?
在理想情况下,我想执行一条SELECT语句,以检查锁定表中的STATUS,如果status = 0表示未运行,则启动后台作业并将状态更改为1 = running。但是,如果所有水平缩放的进程同时执行此操作,是否可以确保仅执行一个?
谢谢!