Как обрабатываются параллельные транзакции? - PullRequest
2 голосов
/ 12 февраля 2012

Я использую Glassfish 3.1 + Hibernate 3.6 + Postgres 9, и я не совсем понимаю, как мне следует обрабатывать «длинные» параллельные транзакции.

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

Я думаю об этом сценарии:

T1 begin
T1 read objects which may already exist

T2 begin
T2 select templates which have to be processed
T1 inserts (generate objects)
T1 commit

T1 select templates which have to be processed
T1 inserts (generate objects)
T1 commit

Как это будет распространяться на меня? Любое исключение блокировки? Или я получу исключение ограничения из-за уникального индекса? Как я могу справиться с этой ситуацией? Перезапустить обработку события 3 раза, прежде чем остановить его обработку?

привет, м

1 Ответ

0 голосов
/ 24 марта 2013

Способ, которым PostgreSQL обрабатывает это, называется многоверсионным управлением параллелизмом.По существу, параллельные транзакции видят моментальный снимок данных, когда они начинают оператор (по умолчанию), или реже, когда они начинают транзакцию (в зависимости от уровня транзакции).

В этом подходе читатели никогда не блокируют писателей, а только писателиблокировать читателей, когда читатель запрашивает это.Только для чтения и вставки вы вряд ли получите исключения блокировки /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...