Örnek Üzerinden RDBMS’lerde Transaction Isolation Seviyeleri

Gökhan Şengün
Aug 25, 2017 · 1 min read

Son flood’da çeşitli Transaction Isolation seviyelerine değinmiştik. RDBMS’ler ilgili izolasyon seviyesinin vadettiği garantileri sağlamak için DB üzerindeki kayıt veya kayıtlarda kilitler tutar. Bu kilitlerin RDBMS’in eş zamanlı işlem yapmasını engellediği ve dolayısıyla scale etmesine engel olduğundan bahsetmiştik. Şimdi bu izolasyon seviyelerinin kullanım alanları ile ilgili aynı domain’den örnekler verelim.

  1. Read Uncommitted, kirli data okumanın (dirty read) problem oluşturmadığı durumlarda kullanılır. Bir oyundaki aktif kullanıcı sayısını gösterdiğimiz ekranda Read Uncommitted ile toplam oyuncu sayısını okuyabiliriz çünkü 2 eksik 1 fazla sayı vermemiz çok önemli olmayacaktır.
  2. Read Committed, oyuncunun oyuna aynı anda sadece bir cihazdan login olmasını istediğimiz ve login durumunda DB’deki bir kolonu işaretlediğimiz bir senaryoda kullanılamaz. Oyuncu iki farklı cihazdan eş zamanlı olarak login isteklerini gönderdiğinde bu izolasyon seviyesinde ‘Nonrepetable Read’ olabileceği için oyuncunun çift giriş yapamayacağını garanti edemeyiz.
  3. Repetable Read, ‘Nonrepetable Read’i engeller, önceki senaryoda oyuncunun oyuna sadece bir giriş yapabileceği senaryoda kullanılabilir.
  4. Serializable, puan tablosundan bir oyuncunun bütün puanlarını toplamak istediğimiz durumda kullanılabilir. Bu izolasyon seviyesinde ‘Phantom Read’, ‘Nonrepetable Read’ ve ‘Dirty Read’ engellendiği için oyuncunun puanı anlık değişimlerden etkilenmeden doğru bir şekilde hesaplanıp oyuncuya gösterilebilir. Burada RDBMS puan tablosunda ‘Range Lock’ tutarak gerekli tutarlılığı sağlar.

Görüldüğü üzere Serializable haricindeki isolasyon seviyelerinin kullanım alanı çok dardır, her transaction’da Serializable kullanmak da DB’nin eş zamanlı işlem yapma özelliğini kısıtlayıp ölçeklenirliğini azaltır. Bu noktada imdada MVCC (Multi Version Concurrency Control), SQL standardında olmayan Snapshot isolation ve Optimistic Locking yetişiyor. Bunları da bir sonraki flood’da ele alacağız.

Gökhan Şengün

Written by

Full stack dad of two and just curious about things. Stories are from my twitter floods @gokhansengun. Main blog is www.gokhansengun.com

Gökhan Şengün

Written by

Full stack dad of two and just curious about things. Stories are from my twitter floods @gokhansengun. Main blog is www.gokhansengun.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store