Veritabanı sistemlerinde, işlemlerin (transaction) güvenli olarak gerçekleştirilebilmesine odaklanan standart bir özellik kümesinin kısaltmasıdır.
Bir veritabanı sisteminin tam olarak güvenli veri işleme özelliğine sahip olduğunu söyleyebilmemiz için bu özellik kümesine sahip olması beklenmektedir.
ACID; Atomicity (Bütünlük), Consistency (Tutarlılık), Isolation (Yalıtım), Durability (Dayanıklılık) akronimi ile ortaya çıkmıştır. ACID’i oluşturan birbirinden önemli bu özellikleri tek tek ele alalım.
Atomicity (Bütünlük)
Bir işlemin bütünlüğünü garanti eder ve ilgili transaction içeriğindeki sorgulardan birisinin çalışması bile başarısız sonuçlanırsa tüm transaction başarısız sayılmalıdır. Yani bir transaction başarılı sayılabilmesi için içeriğindeki tüm sorguların başarılı olarak çalışmış olması gerekmektedir.
Örneğin; bir işlem (transaction) içerisinde products, brands ve stocks tablolarında veri oluşturalım (insert action). Veritabanı sistemimiz bu transactionu işlerken stocks tablosuna bir nedenle veri ekleyemez ise öncesinde products ve brands tablosuna başarıyla eklenen verilerde kaldırılır ve tüm işlem başarısız sayılır.
Bu konuyu daha iyi pekiştirmek için “Start Transaction”, “Commit”, “Rollback” anahtar kelimelerini kullanabilirsiniz.
Consistency (Tutarlılık)
Gerçekleştirilen işlemlerin tutarlı olması gerekir. Bir işlem (transaction) tamamlanana kadar (o esnada gerçekleşmesi gereken tüm operasyonların; indexin güncellenmesi, foreginKey kontrolleri, triggerların çalışması vs.) istemcilere verinin bir önceki hali sunulacaktır. Transaction’ın başarılı şekilde sonuçlanması ile yeni veri sunulmaya başlanacaktır.
İşlem başlangıcında ilgili operasyonların tutarlı şekilde çalışmasını ve verinin tutarlı olmasını garanti eder.
Isolation (Yalıtım)
Bir işlemin (transaction) gerçekleşmesi esnasında aynı veri seti için başka bir işlem gelebilir. Bu durumun karşılanabilmesi için ilk transaction geldiğinde ilgili veri setinin (tamamını ya da bir kısmını) ilgili transaction sonuçlanana kadar (başarılı/başarısız) kilitler. İlk transactionın sonlanmasından sonra ardından gelen transaction işleme alınacaktır.
Eğer yoğun yük altında çalışan bir proje ya da mimarisi yanlış tasarlanmış bir projede çalışıyorsanız ölümcül kitlenmeye (Deadlock) neden olan bu özelliği daha yakından tanımak isteyebilirsiniz 🙂
Durability (Dayanıklılık)
İşlem (transaction) esnasında olası bir hata oluşması durumunda verilerin önceki durumuna döndürülebilmelerini sağlatan özelliktir.
Örneğin; beginTransaction>commit sonrasında rollBack yapabilmemiz bu özelliğin desteği ile mümkün olmaktadır.
Clustering/recovery yapılmasına imkan binary loglar dayanıklılık özelliği sayesinde hayatımızı kurtarmaktadır.
Indexleri düzgün, CPU canavarı olmayan, ölçeklenebilir ve yedekli veritabanlarında çalışmak dileğiyle… {Tabi optimize edilmiş sorgular gönderen yazılımlar kısmınıda atlamayalım :)}