Neden RDBMS ve ACID nedir?

Flood serisinin ilk flood’una bir RDBMS’e neden ihtiyacımız olduğu sorusu ile başlayalım.

RDBMS’ler genel olarak ACID özelliklerini sağladıkları için tercih edilmektedirler. ACID özellikler Atomicity, Consistency, Isolation ve Durability olarak sıralanır. Bu özelliklerden en çok bilineni Atomicity’dir. “Ya hep ya hiç” olarak kısaca anlatılabilir, biz geliştiriciler arasında Transaction olarak da bilinir :-)

Birçok senaryoda, yaptığımız işlem eğer DB’de birden fazla tablo ve/veya kaydı etkiliyorsa değişikliklerden herhangi biri başarısız olduğunda bütün değişikliklerin geri alınmasını isteriz. Tabii eğer bütün değişiklikler başarılı olarak sonuçlandıysa işlemin saklanmasını tercih ederiz. İşte Atomicity özelliği tam olarak bunu garanti eder. DB, işlemleri ya hep ya hiç prensibine göre gerçekleştirir. Klasik olarak örnek verilen A’nın B’ye para transfer etmesi durumunda A’nın hesabından para çekilmesi fakat B’nin hesabına aktarılırken bir hata oluşması durumunda DB, Atomicity özelliği paranın ortada kalmayacağını garanti eder.

Bazı senaryolarda hata aldığımız durumda bile bazı kayıtların DB’de kalmasını isteyebiliriz (hata ayıklama veya hatayı loglama amaçlı), bu tür durumlarda eğer Log kayıtlarını da Transaction’a dahil edersek hata durumunda DB’ye eklenen Log’lar Transaction’ın Abort olması sonucu DB’den silinecektir. Sık yapılan bu hataya dikkat etmek gerekir.

İkinci özellik Consistency, DB’de tutulan verilerle ilgili bazı kurallar belirlenebilmesi ve bu kuralların dış dünyaya dayatılmasıdır. Consistency özelliği sayesinde bir kolonda tuttuğunuz sayısal verinin 0 ile 100 arasında olması, kullanıcı adının 32 karakterden fazla girilememesi ve başka bir tabloya kayıt eklenmeden o kaydın seçtiğiniz tablodan referans edilememesi gibi sınırlamalar ve kontrol noktaları oluşturabilirsiniz. DB üzerinde yapılan her bir işlem (create, read, update, delete) sonucunda bağımlı başka işlemler yapmak isteyebilirsiniz. Örneğin, X tablosundaki kayıtlarda yapılan her bir değişiklikte ChangeLogs tablosuna değişiklikle ilgili bir kayıt eklemek isteyebilirsiniz, Consistency özelliği yapılan her değişiklik için bir Log kaydı oluşturulacağını garanti eder. Yavaş yavaş derinleşeceğiz, Isolation ve Durability özelliklerini bir sonraki Flood’da ele alalım.