Optimistic locking ile pessimistic locking arasındaki fark nedir?

Cevap

İki kullanıcının aynı kaydı aynı anda güncellemesi sonucu birinin değişikliğinin kaybolmasına lost update denir. İki yaklaşımla önlenir.

Pessimistic locking

"Çakışma olacak" varsayımıyla kaydı okurken kilitler; transaction bitene kadar diğerleri bekler.

BEGIN;
SELECT bakiye FROM hesaplar WHERE id = 1 FOR UPDATE;  -- satır kilitlenir
UPDATE hesaplar SET bakiye = bakiye - 100 WHERE id = 1;
COMMIT;

Optimistic locking

"Çakışma nadirdir" varsayımıyla kilit almaz. Bir version sütunu tutulur; güncelleme sırasında versiyonun değişmediği kontrol edilir.

-- Okurken: version = 7
UPDATE urunler
SET stok = 9, version = version + 1
WHERE id = 10 AND version = 7;
-- Etkilenen satır 0 ise başkası önce güncellemiş: yeniden oku ve tekrar dene

ORM'ler bunu hazır sunar (JPA @Version, Django'da elle, SQLAlchemy version_id_col).

PessimisticOptimistic
MekanizmaVeritabanı kilidiVersiyon / timestamp kontrolü
Çakışma sık olduğundaİyiÇok sayıda retry, kötü
Çakışma nadir olduğundaGereksiz beklemeİyi, yüksek eşzamanlılık
RisklerDeadlock, uzun beklemeRetry mantığı yazılmalı
Uzun süren işlem (kullanıcı formu)Uygun değilUygun

Pratik kural: stok düşme, bakiye gibi kısa ve sık çakışan işlemlerde pessimistic; kullanıcının bir formu dakikalarca açık tuttuğu düzenleme ekranlarında optimistic tercih edilir. Basit sayaçlarda ise UPDATE ... SET stok = stok - 1 WHERE stok > 0 gibi atomik güncelleme çoğu zaman ikisine de gerek bırakmaz.

  1. INNER JOIN ile LEFT JOIN arasındaki fark nedir?KolayVeritabanı & SQLBackend
  2. Bir tablodaki ikinci en yüksek maaşı bulun.OrtaVeritabanı & SQLBackend
  3. Index nedir? Dezavantajları nelerdir?OrtaVeritabanı & SQLBackend
  4. ACID nedir?OrtaVeritabanı & SQLBackend
  5. Normalizasyon nedir? Ne zaman denormalizasyon yaparsınız?ZorVeritabanı & SQLBackend
  6. N+1 sorgu problemi nedir ve nasıl çözülür?OrtaVeritabanı & SQLBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle