«Сегодня я узнал о двух типах блокировки, оптимистической и пессимистической, а также о различиях между ними».

TL;DR

  • Оптимистическая блокировка - это когда вы проверяете, была ли запись обновлена ​​кем-то еще, прежде чем вы зафиксируете транзакцию.
  • Пессимистическая блокировка - это когда вы устанавливаете исключительную блокировку, чтобы никто другой не мог начать изменять запись.

Зачем блокировать?

Мы используем блокировки для защиты целостности и атомарности данных в параллельных приложениях, где запись может получать запросы на чтение / запись.

Представьте себе случай, когда несколько пользователей хотят купить товар, а в запасе остался только один. Компания рекламировала этот товар на facebook / twitter / TV / и т. Д. и сразу же 2000 пользователей захотят приобрести этот товар. Конечно, вы должны продать этот товар только одному пользователю, так как на складе осталось только 1. Для управления подобными ситуациями мы используем блокировки. Если мы не справимся с такими ситуациями, это может привести к тому, что этот отдельный элемент будет продан всем этим 2000 пользователям, что приведет к потере 1999 x ItemPrice, поэтому вам лучше использовать для этого блокировки.

Когда дело доходит до блокировки, есть два варианта: пессимистический и оптимистичный, давайте рассмотрим их подробнее.

Пессимистический замок

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

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

  1. В нашем случае, если мы применяем пессимистическую блокировку, первый пользователь, который придет и купит последний товар на складе, нажмет «Купить».
  2. Это заблокирует объект до тех пор, пока платеж не будет завершен или не будет выполнен.
  3. Предположим, пользователь А смог заплатить за него, и теперь стоимость товара на складе установлена ​​на 0.
  4. Все остальные пользователи должны ждать во время этого процесса.
  5. Теперь все остальные пользователи увидят, что товар закончился, и не смогут ничего сделать с этим товаром.

Оптимистический замок

Оптимистическая блокировка - это то место, где вы управляете своими данными, проверяя специальное значение в базе данных - часто это номер версии, отметка времени, дата и т. Д. - перед чтением / записью данных, чтобы убедиться, что данные, с которыми вы имеете дело, не устаревший / старый / не измененный с момента последнего просмотра. Если данные устарели, транзакция не завершена успешно, и выдается ошибка, указывающая на это. Примерно так: «Запись, которую вы пытались изменить, была изменена другим пользователем после того, как вы получили исходное значение».

  1. В нашем случае, если мы применяем Optimistic Lock, первый пользователь, который придет и купит последний товар на складе, нажмет «Купить».
  2. Допустим, пользователь А смог заплатить за него, и перед этапом оплаты проверяется стоимость запаса перед тем, как принять решение об изменении его с 1 на 0.
  3. Если номера версий совпадают, операция фиксируется, и товар заканчивается.
  4. Теперь все остальные пользователи, которые пытаются приобрести этот товар, будут предупреждены о том, что этот товар больше не доступен, прямо в тот момент, когда они попытаются купить, оплатить или добавить его в свои корзины.

использованная литература