2

Я задавался вопрос, каковы преимущества/неудобны для этих двух оптимистических решений блокировки:оптимистичный замок с полем «версия» против уровня изоляции моментальных снимков

  1. Используйте поле «версия» и обнаружение изменений в процессе обновления (то есть с помощью гибернации @version аннотации)

  2. Используйте уровень изоляции моментальных снимков по операциям

Если я сотрудничество дый правильный эти 2 решения имеют такое же поведение: ошибка будет брошен, если строка была обновлена ​​во время операции

Благодаря

+0

Я добавил ответ. Если есть конкретные аспекты, вы хотели бы получить дополнительную информацию о дате мне знать. – usr

ответ

3

Эти два не имеют такое же поведение. С оптимизированным параллелизмом в спящем режиме это нормально, если строка, которая должна быть написана, была изменена тем временем и изменена обратно. Например, +1, за которым следует -1. Также хорошо, что столбцы были изменены, поэтому спящий режим не проверяется.

Изоляция моментальных снимков проверяет все столбцы и не сравнивает данные. Любая запись, даже нулевая запись, такая как x = x считает.

Изоляция моментальных снимков также гарантирует моментальный снимок момента времени для чтения. Вы не сказали, какой уровень изоляции вы намерены использовать для (1). Я предполагаю, что это не SNAPSHOT. По этой причине (2), вероятно, предложит вам гарантии того, что спящий режим не может предлагать самостоятельно.

Hibernate оптимистичный параллелизм подходит для отдельных объектов. Изоляция снимка не может этого сделать, потому что для транзакции требуется, чтобы все операции выполнялись.

Обратите внимание, что оба решения не являются сериализуемыми, поскольку они проверяют запись, но не читают.

+0

любая идея о влиянии на производительность моментального снимка и поле версии + Повторяемые чтения? Из вашего ответа я бы сказал, что лучший способ пойти с полем версии, пока мы не заботимся о фантомных чтениях. Ты согласен с этим ? – Quentin

+1

Повторяющееся считывание может привести к накоплению большого количества блокировок. Он очень близок к SERIALIZABLE в отношении блокировки, блокировки, накладных расходов и сокращения параллелизма. Быть осторожен.; Я не могу рекомендовать стратегию параллелизма, не зная вашей рабочей нагрузки. Вам, очевидно, нужно выбрать стратегию, которая удовлетворит ваши потребности в безопасности. Я не могу знать эти потребности. Накладные расходы. Для обеих стратегий существуют накладные расходы. Они находятся в самых разных местах. SI в целом - удивительный инструмент. Главное преимущество, которое я вижу, заключается в том, что оно автоматизировано и очень легко предсказать. Если вы * можете * использовать его, я бы это сделал. Это лучше, чем RR почти во всех отношениях. – usr

+0

Я могу лучше ответить на более конкретные вопросы. Неопределенность моего ответа объясняется широтой вопроса. – usr

Смежные вопросы