Merhabalar ,
bir çok veri tabanında bu konu hakkında farklı çözümler olsada gerek kullanıcının yanlış kodlaması gerekse mimarinin tam olarak desteklemediği modellerde kirli okuma meydana gelebilir.
Bu arada kirli okuma dirty read nedir?
Bildiğiniz üzere RDBMS üzerinde verilerin belirli bir ilişki ile tutulması mümkündür ve RDBMS bize bunu vaat eder. Sistemler içerisinde verilerin kararlı ve bir biri ile uyumlu şekilde saklanması için her sistem kendine özgü önlem mekanizmaları alarak işlemlerini yapmaktadır. Isolation konusu olan dirty read ile kullanıcılardan herhangi birinin herhangi bir kayıt update işlemleri sırasında aynı veriye ulaşılmak istenildiğinde commit edilmemiş veriye ulaşılma durumu yani değişiklik olurken değişmemiş verinin okunması durumuna denilmektedir.
Senaryo ile örnekleyecek olursak;
A kişisi B kişisine 100tl parasının 50tlsini göndermek istediği zaman sistemsel olarak A-B kişilerine ait satırlarda(aynı tabloda tutulduğu varsayılıyor) güncelleme olacaktır. haliyle teknik olarak 2 güncelleme olacaktır. eğer bu güncellemeler olurken bakiye sorgulaması yaparsak ve bu data gerçekten commit edilmemiş bir bilgi ise aslında sistemde oluşacak değişiklik ile A kişisinin bakiyesi 50tl ye düşerken siz hale sistemde 100tl görüyor olursunuz. Belki siz 100tl gördüğünüz an itibariyle bakiyesi 50tl olmuştur siz commit olmamış veriyi okuduğunuz için yanlış değerleri görüntülüyor olabilirsiniz.
Her RDBMS de benzer durum vardır ve her biri kendine özgü çözümler üreterek taahhütte bulunmaktadır.
SSI denilen özellik ve en son modeller üzerinde kullanılan bu özellik ile postgresql dirtyread önüne geçmektedir.
Commit edilmiş okum,tekrarlı okuma,serializable okuma yöntemlerinde bu konu kendi içerisinde çözümnelmiş bulunmaktadır.
Veri tabanı tutarlığı noktasında ki yazımızla konu hakkında bilgilerin detayını veriyor olacağız
Not:Bunu temelde oracle rollbacksegment ile yapmaktadır.