İyimser ve kötümser kilitleme
Kısaca: Kötümser kilitlemede veriler değiştirilmeden önce kilitlenir; iyimser kilitlemede kaydederken arada başkasının bir şey değiştirip değiştirmediği denetlenir.
Biraz daha ayrıntılı: İki yöntem de, iki kişinin aynı kaydı düzenlediği ve ikinci kaydetmenin birincinin üzerine yazdığı “kayıp güncellemeleri” önler.
Ayrıntılı
- Kötümser:
SELECT ... FOR UPDATE, işlem bitene kadar satırı kilitler. Yüksek çatışmada güvenlidir, ama diğerleri beklemek zorundadır ve kilitlenme (deadlock) tehlikesi vardır. - İyimser: Satırın bir sürüm numarası (veya zaman damgası) vardır. Kaydederken:
UPDATE ... SET ..., version = version + 1 WHERE id = ? AND version = ?. 0 satır değiştiyse başkası kaydetmiştir ve yeniden yüklemek veya birleştirmek gerekir. - Web: Kullanıcı bir formu okur ve dakikalar sonra kaydeder. Uzun kilitler pratik değildir; bu yüzden iyimser yaygındır (HTTP’de ETag ve
If-Match). - Seçim: Nadir çatışma → iyimser; aynı veride sık çatışma (stok, hesap bakiyesi) → kötümser veya atomik güncellemeler (
SET stok = stok - 1). - Bağlam: Bkz. MVCC ve yalıtım düzeyleri.
Ayrıca bak: İşlemler ve ACID