Оптимистическая блокировка и пессимистическая блокировка

база данных

эксклюзивный замок

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

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

Введение в пессимистические блокировки

  • Пессимистическая блокировка: когда мы хотим изменить часть данных в базе данных, чтобы избежать одновременного изменения другими, лучший способ — напрямую заблокировать данные для предотвращения параллелизма.
  • Пессимистический контроль параллелизма на самом деле является консервативной стратегией «сначала блокировка, а затем доступ», которая обеспечивает гарантию безопасности обработки данных.
  • img
  • Однако с точки зрения эффективности механизм блокировки вызовет дополнительную нагрузку на базу данных, повысит вероятность взаимоблокировок и снизит одновременную производительность.

Реализация пессимистической блокировки

  • Уведомление: Чтобы использовать пессимистическую блокировку, мы должны отключить атрибут autocommit базы данных mysql. MySQL использует режим автоматической фиксации по умолчанию, то есть, когда вы выполняете операцию обновления, MySQL немедленно отправляет результат. Мы можем установить MySQL в режим без автоматической фиксации с помощью команды:set autocommit=0;

  • взять каштан

    //开始事务
    begin; 
    //查询出商品库存信息,使用 for update 加上排它锁
    select quantity from items where id=1 for update;
    //修改商品库存
    update items set quantity=100 where id = 1;
    //提交事务
    commit;
    

оптимистическая блокировка

Введение в оптимистическую блокировку

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

Реализация оптимистической блокировки

  1. Проблемы ABA можно избежать, используя одно последовательно увеличивающееся поле версии:

    //查询出商品信息,version = 1
    select version from items where id=1
    //修改商品库存为2
    update items set quantity=2,version = 3 where id=1 and version = 2;
    

    В дополнение к версии можно также использовать временные метки, поскольку временные метки по своей природе последовательно увеличиваются.

  2. Уменьшение силы оптимистической блокировки может максимизировать пропускную способность и улучшить параллелизм:

    //修改商品库存
    update item 
    set quantity=quantity - 1 
    where id = 1 and quantity - 1 > 0
    

Пессимистическую блокировку и оптимистическую блокировку, какую выбрать?

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

Ссылаться на