Transaction Isolation Nedir?
Her şeyden önce, işlem yalıtımı terimini biraz açalım. Transaction isolation, veritabanı işlemlerinin birbirleriyle ne kadar etkileşimde olacağını belirler. Bir işlem (transaction) veritabanında değişiklikler yaparken, diğer işlemler bu değişiklikleri ne zaman göreceğini, ne zaman erişebileceğini veya hangi verilerle çalışacağını bilmelidir.
PostgreSQL’deki Isolation Seviyeleri
PostgreSQL, dört ana transaction isolation seviyesi sunar: Read Uncommitted, Read Committed, Repeatable Read ve Serializable. Bu seviyeler, bir işlem tarafından yapılan değişikliklerin ne zaman ve nasıl görüneceğini kontrol eder.
Bu seviyede, bir işlem henüz tamamlanmamış (committed) veriyi okuyabilir. Diğer bir deyişle, bir işlem, başka bir işlemin yaptığı değişiklikleri henüz tamamlamadan görebilir. Bu, veri tutarsızlıklarına yol açabilir ve genellikle önerilmez. PostgreSQL’de bu seviye varsayılan olarak kapalıdır çünkü genellikle hatalı veri okunmasına sebep olur.
Ne zaman kullanmalı?
Read Uncommitted, genellikle büyük ve karmaşık veritabanı sistemlerinde, gerçek zamanlı uygulamalarda (örneğin, video akışları veya online oyunlar) hızlı bir işlem gerçekleştirmek için kullanılabilir. Ancak dikkatli olunması gerekir.
# 2. Read Committed:
PostgreSQL’in varsayılan isolation seviyesi olan Read Committed, işlemlerin yalnızca onaylanmış (committed) veriye erişmesini sağlar. Bu seviye, genellikle hatalı veri okumayı engeller, ancak yine de bazı durumlarda "non-repeatable read" hatalarına yol açabilir.
Eğer veri tutarlılığı önemli değilse ve uygulamanızda hızlı işlem gereksinimi varsa, Read Committed iyi bir seçenektir. Örneğin, yalnızca okuyup, işlem yapmadan veri sunan sistemlerde kullanılabilir.
# 3. Repeatable Read:
Bu seviyede, bir işlem başladığında, okunan veriler o işlem süresince aynı kalır. Diğer işlemler, işlemdeki veriye erişip değişiklik yapmaz. Ancak, "phantom read" adı verilen durumlar meydana gelebilir; yani, işlem süresince eklenen yeni kayıtlar, mevcut işlemi etkileyebilir.
Repeatable Read, veri tutarlılığı gerektiğinde ve işlemler arasında sık sık aynı veri kümesine erişim yapıldığında tercih edilebilir. Finansal işlemler veya envanter yönetimi gibi kritik sistemlerde oldukça kullanışlıdır.
# 4. Serializable:
En yüksek isolation seviyesidir. Bu seviyede, tüm işlemler birbirinden tamamen bağımsız çalışır, sanki her işlem sırayla gerçekleştirilmiş gibi görünür. Bu seviye veri tutarlılığını sağlar, ancak işlem süresi daha uzun olur.
Eğer veritabanı üzerindeki tüm işlemler mutlak doğruluk gerektiriyorsa, örneğin bankacılık sistemlerinde veya büyük ölçekli e-ticaret platformlarında, Serializable seviyesini kullanmak en iyi seçenektir.