Isolation Level nedir

Merhaba arkadaşlar. Bu yazıda size kısaca çoğu kişinin merak ettiği veri tabanı sistemlerinde kullanılan izolasyon seviyelerinden bahsedeceğim.

Bildiğiniz üzere bir veri tabanında tutarlığı korumak için dört farklı özellik bulunmaktadır. Bunlar; atomicity, consistency, isolation ve durability (Kısaca ACID diye söylenebilir). Biz burada isolation (izolasyon) kısmıyla ilgileneceğiz. İzolasyon bir işlem bütünlüğünün diğer kullanıcı ve sistemlere nasıl göründüğünü ifade eder. İzolasyon seviyesi veri tabanındaki bir işlemin başka işlemlerden nasıl izole edilmesi gerektiğini tanımlar. Kullanılacak olan izolasyon seviyesi aşağıdaki olaylar düşünülerek ve kullanılacak sistemin ihtiyaçlarına göre belirlenebilir.

Dirty Read : Adından da anlaşılacağı gibi kirli bir okumadır. Bir işlemin henüz işlenmemiş bir veriyi okuduğu durumdur. Örnek olarak elimizde T1 ve T2 diye iki işlemimiz olsun. T1 herhangi bir satırı güncelliyor fakat değişikliği onaylamadan işini bırakıyor. Bu arada T2 bu güncellenmiş veriyi okuyabiliyor. Eğer T1 bu işlemi geri alırsa T2 var olmamış veriyi okumaya devam edecektir.

Non-Repeatable Read : Yine elimizde T1 ve T2 diye iki işlemimiz olduğunu varsayalım. Örneğin T1 in bir veriyi okuduğunu varsayalım. Eş zamanlı olarak T2 de bu veriyi güncellemiş olsun. Şimdi T1 aynı verileri tekrar alırsa farklı bir değer okumuş olur.

Şimdi izolasyon seviyelerinden bahsedelim. Bilindiği üzere temelde dört adet izolasyon seviyesi bulunmaktadır.

Read Uncommitted : Read Uncommitted en düşük izolasyon seviyesidir. Adından da anlaşılacağı gibi bu seviyede bir işlem başka bir işlemin henüz onaylamadığı değişiklikleri okuyabilir. Bu sayede yukarıda bahsettiğimiz Dirty Read olayına izin verilmiş olur.

Read Committed : Bu izolasyon seviyesi okunan herhangi bir verinin okunduğunda verinin önceden işlendiğini garanti eder. Böylece Dirty Read e izin vermez.

Repeatable Read : En kısıtlayıcı izolasyon seviyesidir. Bu seviyede herhangi bir işlem referans aldığı tüm satırlarda okuma kilitlerini tutar. Diğer işlemler bu satırları okuyamayacağından, güncelleyemediğinden veya silemediğinden, böylece Non-Repeatable Read ı önlemiş olur.

Serializable : Bu en yüksek izolasyon seviyesidir. Seri hale getirilebilir bir yürütmenin serileştirilmesi garanti edilir.

 

Bu izolasyonların seviyeleri için şu en iyisidir veya şu en kötüsüdür diye bir yorumda bulunamayız. Hangisinin bizim için iyi veya kötü olduğu var olan uygulamamızın ihtiyaçlarına göre değişebilir.

Bir dahaki yazıda görüşmek üzere, hoşçakalın 🙂

Trigger Kullanımı

Merhaba arkadaşlar 🙂 Bugün çoğu veri tabanı sistemlerinde kullanılan Triggerlar hakkında bilgi vereceğim.

Triggerların Türkçesi tetikleyici demektir. Yani akla ilk olarak bir şey sonucunda etkilenen manası gelmektedir. Aslında tam olarak da Triggerlar bunu sağlar.

Triggerları veri tabanlarımızda kullanmamızın ana sebebi bir yerde bir değişiklik olduğunda buna paralel olarak başka bir yerde de değişikliğin sağlanmasıdır. Mesela bir veri tabanımız var ve içinde iki tane tablo olduğunu varsayalım ve X adlı tablomuzda değişiklik yapmak istiyoruz. Bu ekleme olabilir, silme olabilir ya da güncelleme olabilir. Eğer buna bağlı olarak Y tablomuzda da değişiklik olmasını istiyorsak Triggerları kullanırız. Bu bize dinamik bir değişiklik kazandırır. Yani bir tablonun içeriğini değiştirdikten sonra başka bir tablonun içeriğini değiştirmemize gerek kalmaz bu otomatik olarak gerçekleşir.

Triggerları, programlama dillerindeki şart cümleciklerine de benzetebilirsiniz.Yani şartın sağlanması gerekir şart sağlanıyorsa eğer Trigger çalışır.

Triggerlar Insert, Delete ve Update işlemleri üzerinde çalışırlar.

Veri tabanımızda bir Trigger yaratmak için aşağıdaki yapıyı kullanırız.