Все,Как решить проблему параллелизма?
Я использую MySql 5.7 в своем приложении. Я пытаюсь сделать мою функцию безопасности Concurrency Safe. Я объясню пример.
Пример: У меня есть два администратора Admin 1 и Admin 2. У нас есть таблица продуктов, и у нас есть запись в таблице продуктов с кодом продукта «P1». Предположим, что Admin 1 и Admin 2 вошли в систему и одновременно пытаются обновить запись продукта с кодом «P1».
Мне нужно сообщить одному из пользователей, что запись, которую вы пытаетесь изменить, обновляется другим пользователем и повторите попытку через некоторое время.
Я использую транзакцию и не изменяю уровень транзакций по умолчанию MySql (повторяемое чтение). Я пытаюсь решить эту проблему, используя «ВЫБЕРИТЕ ДЛЯ ОБНОВЛЕНИЯ» (включая условие, в котором нужно проверить с измененным временем). Это условие «где» решит проблему параллелизма для тех транзакций, которые уже совершены. Но если две транзакции начинаются в одно и то же время и первая транзакция фиксируется до таймаута блокировки, тогда, когда вторая транзакция выполняется, она перезаписывает первый.
Пожалуйста, поделитесь своими идеями
Заранее спасибо
Вы можете просто сделать LOCK TABLES product WRITE' перед тем, как появится критическая секция. Не забудьте разблокировать потом. – apokryfos
@apokryfos блокировка всей таблицы до конца редактирование одной записи на самом деле не является эффективным решением – Shadow
Я думаю, это может быть одно из решений: использовать движок InnoDB и 'select ... for update' – Wizard