У меня проблема, и я подумываю об использовании метода изоляции базы данных == Сериализуемый для этой ситуации, но после прочтения кучки статей я все еще не уверен, что это решение для моего проблема ниже.Проблема параллелизма в заявлении о выборе базы данных
Настройка:
Weblogic cluster > 2 servers
Simple Java JDBC
Servlets, EJB Session beans 2.0
У меня есть таблица LAN
и мы выбираем соответствующие значения на основе ввода заданного клиентом.
LAN
lan_id | name | some_values | is_available
-------------------------------------
13 | ss | 3234 | yes
12 | sssd| 3234 | yes
14 | sssd| 3234 | yes
15 | ssaa| 3234 | yes
В настоящее время в бизнес-логике, мне нужно выбрать соответствующий ряд из локальной сети и сохранить еще одну таблицу LAN_Assignment
LAN_Assignment
lan_id | lan_assg_id | some other columns
-------------------------------------------
Когда запустив оператор select, я получаю соответствующую строку из таблицы LAN и назначьте его таблице lan_assignment.
Теперь Если из клиента поступило 5 запросов (может быть любой сервер в кластере), все они выбирают первую доступную локальную сеть и сохраняют ее в другой таблице.
Как я могу убедиться, что первый запрос, который взял LAN, не выбран вторым запросом от клиента?
PS: заявления выбора и бизнес-логика не так прямолинейны, как описано здесь. Есть много условий, чтобы выбрать LAN и сохранить его Lan_assignment и т.д.,
спасибо
Не может ли одна функция атомной выборки и блокировки (как в хранимой процедуре) гарантировать, что этого не произойдет? –
Запустите SQL-запросы в транзакции * и * заблокируйте выбранную строку для обновления, чтобы другие запросы не продвигались до тех пор, пока они не получат блокировку, если они закончат выбор одной и той же строки - убедитесь, что ваша логика работает как можно быстрее не ухудшать производительность. – watery
Какая база данных вы используете и версию? –