В настоящее время у меня есть приложение, которое масштабируется горизонтально с одной базой данных SQL.Периодически запускается фоновый процесс, но я хочу, чтобы одновременно выполнялся только один запуск этого фонового процесса.Я пытался сделать это с помощью строки базы данных и блокировки, но я застрял.Требуется, чтобы только одно пакетное задание было успешно выполнено в день.
В настоящее время у меня есть таблица с именем lock, которая имеет три столбца: timestamp, lock_id, status.Состояние - это перечисление с тремя значениями: 0 = не запущен, 1 = запущен, 2 = завершен.
Проблема заключается в том, что если пакетное задание не выполняется и состояние равно 0, как я могу убедиться, что толькоповторяется один фоновый процесс.Как я могу гарантировать, что в сценарии повтора работает только один фоновый процесс?
В идеальном мире я хотел бы сделать инструкцию SELECT, которая проверяет STATUS в таблице блокировок, если статус = 0это означает, что не работает, затем запустите фоновое задание и измените статус на 1 = выполняется.Однако, если все горизонтально масштабируемые процессы делают это одновременно, гарантируется ли выполнение только одного?
Спасибо!