Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: locking, concurrency, transaction, jpa

Чем пессимистичные блокировки отличаются от оптимистичных? В каких сценариях каждая предпочтительна?

Сравнивает стратегии управления конкурентным доступом к данным.

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

Пессимистичные блокировки (например, SELECT FOR UPDATE) блокируют строки заранее. Оптимистичные проверяют конфликты при коммите через версии (например, version в JPA). Пессимистичные подходят для частых конфликтов, оптимистичные — для редких.

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

1. Пессимистичные блокировки:

@Lock(LockModeType.PESSIMISTIC_WRITE)
Book findById(Long id); // Блокирует строку в БД
  • Плюсы: Гарантирует целостность при высокой конкуренции.

  • Минусы: Риск взаимоблокировок (deadlocks).

  • Сценарии: Банковские переводы, билетные системы.

2. Оптимистичные блокировки:

@Entity
public class Book {
    	@Version
    	private Long version; // Автоинкремент при изменении
}

При коммите:

UPDATE book SET price = 200, version = 2 
WHERE id = 1 AND version = 1; -- Если версия изменилась, возникнет OptimisticLockException
  • Плюсы: Нет блокировок, высокая пропускная способность.

  • Минусы: Повторные попытки при конфликтах.

  • Сценарии: Редактирование профилей, системы с низкой конкуренцией.

Вывод: Выбирайте стратегию на основе частоты конфликтов.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

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

#locking

#concurrency

#transaction

#jpa

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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