2013-03-21 5 views
1

Мы используем Java EE. И делают apllication, где в худшем случае, aloot сообщений очереди сообщений willl получают один и тот же пользователь.Пессимистическая блокировка наихудшего случая

Поэтому мы смотрим на пессимистичную блокировку стиля SELECT FOR UPDATE. Что в теории и в тестах помогает решить наши проблемы.

Но мы боимся тупиков. Не классические: User X locks A, User Y блокирует B. Но больше похожего на сценарий: системный сбой, проблемы netowrk и т. Д. Система Datbase блокируется, не зная причины. Мы будем использовать современные базы данных, такие как: oracle, MS SQL и postgresql.

Что мы хотели бы знать - это пессимистическая блокировка, используемая в производстве, и какие практические проблемы ожидать?

Заранее благодарен!

ответ

1

Худшая проблема, с которой я столкнулся с пессимистичной блокировкой, является неизбежным узким местом, которое создает база данных.

Другими словами, при условии, что ваш код предотвращает взаимоблокировки (как вы говорите в своем сообщении) на уровне приложения, производительность становится проблемой - пропускная способность падает, так как только один пользователь за один раз может выполнить обновление по заданному набору данные.

Возможно, что заблокированная таблица остается заблокированной, если возникает системное исключение, так что выполняется select for update, но не совершено, но в целом это не является общим (хотя это, очевидно, зависит от вашего кода). Я не видел, чтобы это происходило в связи с проблемой, связанной с инфраструктурой, но только с помощью ошибок приложений.

Вы можете немного уменьшить проблему пропускной способности, если это возможно, путем пакетного обновления, но это действительно зависит от конкретной ситуации.

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