![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
rdmrdm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.3.2012 Репутация: нет Всего: нет |
Первый вопрос. Какая связь существует между уровнем изоляции транзакций, параметрами JPA Lock.READ / Lock.WRITE и версиями @Version(Оптимистическая блокировка). Я более менее понял по отдельности каждую из этих 3 разделов, но не понимаю, как они связаны между собой. Выбранный уровень изоляции транзакций дает некие «гарантии» при проведении операций с таблицами. Параметры Lock.READ/Lock.WRITE позволяют добиться блокировки полей таблицы при проведении операций. Если я правильно понял для этого как раз и используются поле @Version. Но все таки не до конца улавливаю связь между эти тремя понятиями. Или они дополняют друг друга, или это разные способы решения одних и тех же проблем. В общем, буду очень благодарен за ответ или же ссылку где можно прочесть информацию именно по вопросы связи между этими понятиями и их совместном использовании.
Второй вопрос. Каким способом в Hibernate можно указать требуемый уровень изоляции транзакции для конкретной транзакции. И принято ли так делать. Спасибо. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: нет Всего: 161 |
Я попытаюсь дать вам ответ вне контекста JPA и хибернейт, ибо, как мне кажется, тут можно подняться на более высокий уровень абстракции. Заранее прошу прощения, если мой ответ окажется не в дугу.
Уровень изоляции транзакций определяет степень согласованности чтений в многопользовательской среде. Дважды запросив одну и ту же ифномрацию, по одним и тем же критериям, можно получить различные результаты, т.к. данные могли быть изменены другой сессией. Степень независимости запрашиваемых данных от модификаций, производимых в параллельных сессиях и определяют уровни изоляции транзакций. Один из способов обеспечения этой изоляции являются блокировки. В этом случае, при самом высоком уровне изоляции(serialized), будучи единожды прочитанными, данные блокируются для модификации другими сессиями, до окончания читающей транзакции. Стратегия блокирования определяет способ сохранения согласованных данных в многопользовательской среде. Оптимистическая стратегия блокирования предполагает, что между событием чтения исходных данных и сохранением результата, исходные данные могут быть изменены лишь в исключительном случае, и потому не блокирует исходные данные на время вычисления результата, лишь проверяет их неизменность пред его сохранением. Пессимистическая стратегия предполагает, что попытки изменить исходные данные конкурирующим процессом , в процессе вычисления результата, определенно будут предприняты, а потому блокирует исходные данные на все время вычисления результата. Пытаюсь изобразить на примере: Пессимистическая стратегия блокирования: 1) открываем транзакцию с высоким уровнем изоляции 2) Читаем исходные данные с блокированием. Теперь ни одна тварь не сможет их изменить. 3) Много тупим 4) Получаем результат 5) Сохраняем результат 6) фиксируем транзакцию, отпускаем блокировки Оптимистическая стратегия блокирования: 1) Читаем исходные данные:
3) получаем результат 4) сохраняем результат:
Это сообщение отредактировал(а) Zloxa - 13.3.2012, 15:38 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
rdmrdm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.3.2012 Репутация: нет Всего: нет |
Спасибо за ваш ответ. Время от времени мне кажется, что я понимаю эти вещи)
Вообще мне кажется полезным, если бы кто-то из людей с опытом написал пример, в которым были бы продемонстрированы разные варианты, в т.ч. при одновременных транзакциях. Например какое-нибудь приложение GUI с выборов вариантом уровня изоляции, блокировок и просмотром результата работы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |