Я работаю над веб-проектом на PHP, где пользователь нажимает кнопку «Обновить», и начинается длительный процесс.Обновление должно быть видно за пределами транзакции (проблема синхронизации)
Что я хочу, так это то, что если один пользователь уже запускает этот процесс, то другие пользователи могут сказать, когда они загружают страницу, процесс уже запущен, время начала и кто ее запустил. Они не смогут запустить процесс снова, когда он уже запущен.
я мог бы сделать что-то вроде этого (SQL ниже упрощенно):
-- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
SELECT 1 FROM institutions WHERE institution_code = '15' FOR UPDATE;
UPDATE institutions SET process_start = CURRENT_TIMESTAMP,
process_acct_id = 101, process_finish = null WHERE institution_code = '15';
-- Process Runs here, taking a couple of hours.
UPDATE institutions SET process_finish = CURRENT_TIMESTAMP
WHERE institution_code = '15';
COMMIT;
Проблема с вышесказанным, что другие потоки не могут видеть process_acct_id, process_start и process_finish до окончания процесса запуска и сделка совершена. Как мне написать так, чтобы они могли? Я запускаю первое обновление в автономной транзакции? Или есть лучший способ?
Я не уверен, что вы имеете в виду. Не могли бы вы подробнее рассказать о том, как это будет реализовано? –