У нас есть приложение, которое в течение дня будет собирать события и обрабатывать их один или два раза в день. Но у нас есть одна база данных и два экземпляра приложения, поэтому мы ищем, как убедиться, что каждое событие обрабатывается один раз.
События будут содержать идентификатор регистрации, и один или два раза в день мы хотим обрабатывать каждую регистрацию, в которой было событие. Я считаю, что это означает, что мы должны хранить каждое событие с текущей отметкой времени. Но я застрял, пытаясь понять, как их обрабатывать, принимая во внимание повторяющиеся экземпляры.
Один из способов - добавить столбец processingTimestamp, экземпляр будет SELECT
строкой, в которой этот столбец равен NULL
, а UPDATE
- текущим временем. Но я считаю, что этот рабочий процесс не помешает двум экземплярам обрабатывать одну и ту же регистрацию. Они оба могут сделать SELECT
до того, как произойдет первое UPDATE
.
Другой способ, о котором я подумал, - это запустить транзакцию, чтобы все события из регистрации были заблокированы, и другой экземпляр не мог получить к ним доступ, но я чувствую, что это не совсем то, для чего предназначены транзакции.
Это похоже на обычную проблему, возникающую при работе с несколькими экземплярами, но каково решение?