Я работаю над приложением в параллельной ситуации, когда несколько экземпляров приложения одновременно обновляют строки в базе данных.Каждый экземпляр приложения создает событие обновления в таблице событий обновления, событие обновления может иметь статус IN_PROGRESS / NEW / CANCELED.Я хочу создать запрос на обновление события обновления, если:
- нет события обновления для того же элемента с идентификатором состояния = IN_PROGRESS
- нет события обновления для того же элемента с идентификатором состояния = новогои метка времени> текущая метка времени события обновления.
Таблица:
UpdateId | itemId | status | time_stamp
1 | 1 | IN_PROGRESS | 1.1
2 | 1 | NEW | 1.2
3 | 1 | NEW | 1.3
4 | 1 | NEW | 1.4
С обновлениями 1, 2, 3, 4, как указано выше, в основном я хочу, чтобы 2 подождал, пока не будет сделано 1, если приходят 3, 4, то 2 -> отменяется.То же самое для 3.
Что-то вроде:
Update UPDATE_EVENT SET status = IN_PROGRESS IF {
SELECT count (*) FROM UPDATE_EVENT where status=IN_PROGRESS & itemId=item1 = 0
&&
SELECT count (*) FROM UPDATE_EVENT where status=NEW & timestamp > updateId_abc123.timestamp = 0
} WHERE updateId=abc123
Обновления не очень часты, также задержка не является проблемой.Любые идеи о том, как я могу построить запрос и является ли он потокобезопасным?