На самом деле для таких ситуаций следует использовать оптимистическую блокировку. Может использоваться следующим образом:
- Пользователь просит пользовательский интерфейс получить запись для редактирования.
- Сервер выбирает записи и передает их в пользовательский интерфейс. Предположим, в это время запись
быть отредактированным имел версию 1. Теперь база данных освобождена. нет
Ресурсы базы данных хранятся, поскольку мы не знаем, выдаст ли пользователь запрос на обновление
или нет .
- Теперь пользователь редактирует данные в пользовательском интерфейсе и запрашивает их обновление на сервере с помощью
исходный номер версии, отправленный на шаге 2.
- Теперь из пула соединений с БД взято новое согласие базы данных, и запись
обновляется в БД, если оригинальная запись в БД имеет ту же версию, что и была
отправлен в пользовательский интерфейс на шаге 2. Это версия записи, представленной на шаге 4
изменено перед отправкой запроса на редактирование, вы должны попросить пользователя снова редактировать
со свежими данными.
В приведенном выше сценарии ресурсы базы данных не удерживаются до продолжительности всего разговора пользователя.
Вообще говоря, в таких сценариях оптимистичная блокировка хороша.
Но если очень важно удерживать ресурсы с блокировками записи до фиксации транзакции, тогда следует использовать Pessimitic
Например, предположим, что существует простая система бронирования билетов в кино, в которой нет мест для пользователя, который еще не совершил платеж. Средства после оплаты они могут или не могут получить билеты. Когда после оплаты они запрашивают систему бронирования, чтобы забронировать билет.
- Предположим, в db есть таблица, в которой хранится количество мест в шоу.
- Tx1 принимает блокировку записи этой таблицы с пессимизмом.
- Пока транзакция TX1 для бронирования фильма не совершит никакую другую транзакцию,
захватить замок этой таблицы.
- Когда Tx1 завершает, он уменьшает количество мест на количество мест, забронированных в Tx1
- Теперь, когда Tx2 получает блокировку записи и если число оставшихся точек совместимо, это
если не получится, пользователь получит сообщение о том, что места забронированы другими
пользователь и оплата возвращается.
В этой ситуации имеет смысл удерживать блокировку Pessimitic до завершения транзакции бронирования. Даже в этой ситуации у пользователя нет блокировок и транзакций.
полный разговор.
Пессимистические блокировки чтения или пессимической записи удерживаются до тех пор, пока транзакция не будет зафиксирована или откатана. Только Pessimitic блокировки чтения могут быть разделены, все другие комбинации блокируют друг друга, пока не будут освобождены.