Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Затишна Галера
Added 06 Jan 2025 🌐 UK

Затишна Галера

@Zatishna_Galera
Number of subscribers: 2 690
Photos: 1,570
Videos: 475
Links: 2,090
Description:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Source

Затишна Галера | ЧарівнийКомпас 🧭2️⃣5️⃣4️⃣ Завдання 254Що таке optimistic locking і pes...

Telegram community logo - Затишна Галера Затишна Галера @Zatishna_Galera
460 Views/Reach 2026-10-05 15:32 Message №3007
#ЧарівнийКомпас 🧭
2️⃣5️⃣4️⃣ Завдання 254

Що таке optimistic locking і pessimistic locking?


Це два підходи до вирішення ситуації, коли кілька користувачів або процесів одночасно намагаються змінити ті самі дані.

🤔 Optimistic locking виходить з припущення, що конфлікти трапляються рідко.

Система не блокує запис під час роботи з ним. Замість цього при збереженні вона перевіряє, чи не змінив хтось дані після того, як ми їх прочитали.

Типовий приклад - поле version.

Ми відкриваємо запис з version = 5, змінюємо його і намагаємся зберегти. Але якщо інший користувач уже встиг змінити цей запис і його версія стала «6», то наша операція буде відхилена через конфлікт.

Тобто логіка приблизно така: зроби додаткову перевірку перед збереження, навіть якщо це витратить ще трошки часу.

👍 Основні плюси тут: немає довгих блокувань,добре масштабується, підходить, коли одночасні зміни трапляються рідко.

😡 Мінус - конфлікт потрібно правильно обробити: повторити операцію, оновити дані або показати користувачу повідомлення.

🤔 Pessimistic locking працює навпаки. Система припускає, що конфлікт можливий, тому блокує ресурс заздалегідь.

Наприклад, одна транзакція читає рядок у базі та ставить lock. Інша транзакція, яка хоче змінити цей самий рядок, повинна чекати, поки блокування не буде знято.

Тут вже логіка наступна: поки один користувач працює з даними - інші поки що їх не змінюють.

👍 Основні плюси тут: менше ризику конфліктів під час запису, зручно для критичних операцій, де паралельна зміна небезпечна.

😡 Але і мінусів вистачає: інші операції можуть чекати, падає concurrency, неправильна робота з блокуваннями може призвести до deadlock.

Тобто основна різниця у підході - блокуємо ми дані чи ні, та надаємо можливість працювати з ними одночасно кільком користувачам чи ні.

@Zatishna_Galera