Pessimistic Lock vs. Optimistic Lock
Yazılım geliştirme sürecinde, çoklu kullanıcı etkileşimleri ve eş zamanlı veritabanı erişimleri gibi durumlarla karşılaşmak yaygındır. Bu durumlarla başa çıkarken, veri bütünlüğünü sağlamak ve aynı anda yapılan işlemlerin çakışmasını önlemek önemlidir. Bu bağlamda, iki temel kilitleme stratejisi ön plana çıkar: pessimistic lock (kötümser kilitleme) ve optimistic lock (iyimser kilitleme).
Pessimistic Lock (Kötümser Kilitleme)
Pessimistic lock stratejisi, veri üzerindeki işlemleri kilitler ve bu kilit, işlem tamamlanana kadar serbest bırakılmaz. Bu durumda, bir kullanıcı belirli bir kaynağa erişmek istediğinde, kaynak kilitlenir ve diğer kullanıcılar o kaynağa erişemezler.
Örneğin, bir banka uygulamasını düşünelim. Bir kullanıcı hesap bilgilerini güncellemek istiyor. Pessimistic lock stratejisi kullanıldığında, kullanıcı bu işlemi başlatırken ilgili hesap verileri üzerinde bir kilit uygulanır. Diğer kullanıcılar, bu hesap verilerine erişemezler ve beklemek zorundadırlar. Kullanıcı güncelleme işlemini tamamladığında, kilit serbest bırakılır ve diğer kullanıcılar işlemlerini gerçekleştirebilirler.
Bu yöntem, çakışmaları önlemek adına güvenilir bir yol sağlar, ancak aynı zamanda performans sorunlarına yol açabilir, özellikle çok sayıda kullanıcı aynı kaynağa erişmeye çalıştığında bu performans kaybı ortaya çıkar. Çünkü bir zaman aralığında dataya yalnızca erişebilen bir accessor vardır. Eğer aynı dataya erişmek isteyen birden çok accessor’ünüz var ise bunlar bir line’a dizilip sıralı bir şekilde dataya erişebilirler ve herhangi bir concurrency elde edemeyiz. Ayrıca bir accessor lock aldığında crash olursa da sıkıntılar çıkabilir. Bu noktada lease kullanılabilir ve lock belli bir süre sonra kendini açabilir.
Optimistic Lock (İyimser Kilitleme)
Optimistic lock stratejisi ise, çakışma olasılığına karşı daha esnek bir yaklaşım benimser. İşlem başlamadan önce, sistem kaynağın mevcut durumunu kontrol eder ve işlem sırasında başka bir kullanıcı tarafından değiştirilip değiştirilmediğini belirler. Optimistic Locking’te dataların versiyon numaraları devreye girer. Her datanın bir version numarası bulunur. Bir data, source’tan alındığında bir versiyon numarasıyla gelir ve bu data üzerinde güncelleme yapılmak istenildiğinde alınan versiyon numarası ile tablodaki versiyon numarasının aynı olup olmadığına bakılır. Eğer versiyon numarası farklı ise sizden önce başka bir process datayı alıp sizden önce güncellemiş ve versiyon numarasını artırmış demektir. Böyle bir durumda güncelleme işlemi hata verecektir. Yani eğer başka bir kullanıcı tarafından değiştirilmişse, işlem uyarı verir ve kullanıcıya durumu çözme şansı tanır. Bu strateji, kaynakların daha serbest bir şekilde paylaşılmasına izin verir, ancak çakışmaların yönetilmesi daha karmaşık olabilir.
Hangi Stratejiyi Kullanmalısınız?
Hangi locking stratejisinin kullanılacağı, uygulamanın gereksinimlerine ve kullanım senaryolarına bağlıdır. Eğer uygulamanızda veri bütünlüğü kritikse ve çakışmaların önlenmesi gerekiyorsa, pessimistic lock tercih edilebilir. Ancak, performans ve esneklik ön planda ise, optimistic lock daha uygun olabilir.
Sonuç olarak, her iki kilitleme stratejisi de belirli senaryolarda etkili olabilir. Önemli olan, uygulama gereksinimlerinizi ve kullanıcı davranışlarını anlamak, ardından uygun stratejiyi seçmektir. Unutmayın ki her durum farklıdır ve genel bir kural bulunmamaktadır.