Sobes.tech
Senior

Wat zijn pessimistische en optimistische blokkeringen? Hoe krijg je een pessimistische blokkering zonder het isolatieniveau te wijzigen?

sobes.tech AI

Antwoord van AI

Пессимистичные блокировки предполагают, что конфликт при доступе к данным вероятен, поэтому блокировка берётся сразу при чтении или записи, чтобы предотвратить изменения другими транзакциями.

Оптимистичные блокировки исходят из предположения, что конфликты редки, поэтому данные читаются без блокировок, а проверка на конфликт происходит при попытке записи (например, через версионные номера).

Чтобы получить пессимистичную блокировку без изменения уровня изоляции, можно использовать явные блокировки на уровне SQL-запросов, например, в JDBC:

// Получение пессимистичной блокировки на строку
String sql = "SELECT * FROM table WHERE id = ? FOR UPDATE";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();

Здесь FOR UPDATE блокирует выбранные строки для других транзакций, не меняя при этом глобальный уровень изоляции транзакции. Это позволяет реализовать пессимистичную блокировку локально для конкретного запроса.