Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: optimistic locking, pessimistic locking, concurrency control, database locking, transaction isolation

В чем разница между optimistic locking и pessimistic locking?

Вопрос проверяет понимание стратегий управления конкурентным доступом к данным в базах данных и распределенных системах.

Короткий ответ

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

Длинный ответ

Основное различие

Оптимистичная блокировка (optimistic locking) и пессимистичная блокировка (pessimistic locking) — это два подхода к управлению одновременным доступом к данным. Оптимистичная блокировка предполагает, что конфликты между транзакциями происходят редко, поэтому она не блокирует данные сразу, а проверяет их целостность только в момент фиксации. Пессимистичная блокировка, наоборот, исходит из того, что конфликты вероятны, и блокирует ресурс на всё время работы с ним.

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

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

-- Пример с версией в SQL
UPDATE products
SET price = 100, version = version + 1
WHERE id = 1 AND version = 5;
-- Если затронуто 0 строк — конфликт

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

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

-- Пример с SELECT FOR UPDATE в SQL
BEGIN;
SELECT * FROM products WHERE id = 1 FOR UPDATE;
-- Другие транзакции ждут
UPDATE products SET price = 100 WHERE id = 1;
COMMIT;

Когда что применять

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

Вывод: выбор зависит от сценария — оптимистичная блокировка проще и быстрее при редких конфликтах, пессимистичная надёжнее при частых изменениях.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#optimistic locking

#pessimistic locking

#concurrency control

#database locking

#transaction isolation

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.