Во-первых, в вашем приложении ничего не пойдет не так. (если только вы не превысите максимальное количество соединений, разрешенное базой данных или вашим приложением) Сама база данных будет обрабатывать, не позволяя нескольким соединениям «обновлять» одну и ту же строку «в одно и то же время». Если вы явно не укажете иное в своем выражении SQL, механизмы блокировки по умолчанию заставят ваши многочисленные попытки обновить одну и ту же строку в очередь.
Теперь ваша забота о целостности данных. Определите, что является проблемой, а что нет, попытка исправить уровень приложения, чтобы предотвратить одновременное выполнение несколькими узлами одного и того же запроса, может не стоить времени и хлопот, если простое управление базой данных несколькими запросами приводит к подходящему результату. ,
Я предлагаю несколько решений, которые уменьшат количество выполненных ОБНОВЛЕНИЙ, но не количество соединений, которые ваше приложение будет использовать с базой данных.
Добавьте больше логики в свой оператор UPDATE - например, обновляйте, только если существующее значение для конечной даты устарело более чем на 5 секунд (или 5 минут, или 5 часов, в зависимости от вашего варианта использования). Это не должно быть большое значение, потому что эти операторы будут выполняться быстро, если их одновременно запросят узлы приложения.
И / ИЛИ оформить заказ "пропустить заблокирован" здесь:
https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html
это, по сути, примет запрос первого узла, а затем все остальные, которые пытаются выполнить обновление, просто останавливаются, если они пытаются выполнить обновление, пока строка заблокирована. Это может занять место приведенной выше логики, но только для запросов, которые происходят, пока строка уже заблокирована предыдущим ОБНОВЛЕНИЕМ.