Veritabanı sistemleri, günümüzde pek çok şirketin verilerini depolamak, yönetmek ve erişmek için kullandıkları temel bir araç haline gelmiştir. Veri bütünlüğü ve güvenilirliği sağlamak, bu sistemlerin temel amaçlarından biridir. Bu amaçlarına ulaşma yolunda bazı prensipler vardır. Bu prensiplerden biri de ACID’dir. ACID, Atomicity (Atomiklik), Consistency (Tutarlılık), Isolation (İzolasyon) ve Durability (Kalıcılık) kelimelerinin baş harflerinden oluşan bir kısaltmadır. Şimdi gelin ACID’ın baş harflerinin ne demek olduğunu inceleyelim.
Atomicity
Bir işlem, ya tamamen başarılı olur ya da hiç gerçekleşmemiş gibi davranır. Yani işlem sırasında bir hata olursa, işlemin yaptığı tüm değişiklikler geri alınır ve veritabanı eski haline döner. Bir banka hesabından başka bir banka hesabına para transferi yapmak istediğimizi düşünelim. Bu işlem, iki adımdan oluşur: gönderici hesaptan para çekmek ve alıcı hesaba para yatırmak. Eğer bu işlem sırasında bir aksaklık olursa, örneğin elektrik kesintisi, internet bağlantısı kopması veya sistem çökmesi, işlem yarım kalmamalıdır. Yani ya gönderici ve alıcı hesaplar arasında para transferi tam olarak gerçekleşmeli, ya da hiçbir değişiklik olmamalıdır. Bu şekilde, hem gönderici hem de alıcı hesaplarının bakiyeleri korunmuş olur.
Consistency
Bir işlem, veritabanının bütünlüğünü korur. Yani işlem öncesi ve sonrası veritabanı, tanımlanmış kurallara ve kısıtlamalara uygun olmalıdır. Bir e-ticaret sitesinde bir ürün satın almak istediğimizi düşünelim. Bu işlem, ürünün stoktan düşürülmesi, siparişin kaydedilmesi, ödemenin alınması ve faturanın oluşturulması gibi birçok adımdan oluşur. Eğer bu işlem sırasında bir hata olursa, örneğin stokta olmayan bir ürün satılmaya çalışılırsa, işlem iptal edilmelidir. Yani işlem öncesi ve sonrası veritabanı, ürün stokları, sipariş bilgileri, ödeme durumları ve fatura bilgileri gibi kurallara ve kısıtlamalara uygun olmalıdır. Bu şekilde, hem satıcı hem de alıcı tarafının hakları korunmuş olur.
Isolation
Aynı anda birden fazla işlem yapıldığında dahi her bir işlemin diğerlerinden bağımsız olarak çalışmasını sağlayan bir özelliktir. Bir işlem diğer işlemlerin sonuçlarını etkilememelidir. Bir sosyal medya sitesinde bir gönderiyi beğenmek istediğimizi düşünelim. Bu işlem, gönderinin beğeni sayısını artırmak ve beğenen kullanıcı listesine eklemek gibi iki adımdan oluşur. Eğer bu işlem sırasında başka bir kullanıcı da aynı gönderiyi beğenirse, işlemler birbirini etkilememelidir. Yani her işlem, kendi başına çalışmalı ve veritabanına erişirken diğer işlemlerden bağımsız olmalıdır. Bu şekilde, hem gönderi sahibi hem de beğenen kullanıcıların bilgileri doğru ve güncel olur.
Durability
Bir işlemin gerçekleşmesinin ardından verilerin kalıcı bir şekilde saklanması gerektiğini belirtir. Sistem çökse bile, işlemlerin sonuçları kalıcı olmalıdır. Bir blog sitesinde bir yazı yazmak istediğimizi düşünelim. Bu işlem, yazının veritabanına kaydedilmesi ve siteye yansıtılması gibi iki adımdan oluşur. Eğer bu işlem başarıyla tamamlandıktan sonra, veritabanında veya sitede bir sorun olursa, örneğin disk arızası, sunucu çökmesi veya saldırı, işlemin sonucu kaybolmamalıdır. Yani yazının veritabanında ve sitede kalıcı olarak saklanması sağlanmalıdır. Bu şekilde, hem yazar hem de okuyucuların bilgileri güvence altına alınmış olur.
Bu prensipleri sağlamak için belli başlı çalışmalar yapılabilmektedir. Örneğin bir hesaptan başka bir hesaba para gönderme işleminde transaction yapıları kullanılabilir. Böylece işlem başarıyla tamamlandığı commit, hata durumunda rollback yaparak Atomicity i sağlayabiliriz. Commit ve rollback sonrası hesap bakiyelerinin doğru bir şekilde güncellenmesiyle yada hiç güncellenmemesiyle Consistency’ide sağlamış oluruz. Yani işlem tamamlandıktan sonra kaynak ve hedef hesap bakiyerinin toplamı değişmemiş olur. Yine bu işlemde kaynak hesaptan para çekildikten sonra bu hesaba erişimi engellemekte Isolation tarafında yapılması gerekenlerdir. Bunu da çeşitli mekanizmalar ile sağlayabiliriz örneğin lock mekanizmaları. Son olarak para transferi gerçekleşmeden önce yapılacak işlemleri işlem günlüğüne yazdığımızda veritabanı çöktüğünde bile bu günlük dosyası ile sistemi tekrar tutarlı hale getirebiliriz.
Sonuç olarak ACID prensipleri, veritabanı sistemlerindeki işlemlerin güvenilirliğini ve bütünlüğünü sağlamak için temel bir kılavuz sunar. Atomicity, Consistency, Isolation ve Durability, veri tabanı işlemlerinin doğru ve güvenilir şekilde gerçekleşmesini sağlar. Bu prensipler, veri yönetimi süreçlerinde güvenilirliği artırırken, bazen performansın azalmasına neden olabilir. Ancak dengeli bir şekilde uygulandığında, veri tabanlarının güvenliği ve sağlamlığı adına önemli bir katkı sağlarlar. ACID prensiplerinin anlaşılması, veri yönetimindeki etkinliği artırarak işletmelere daha güvenilir ve tutarlı veritabanı sistemleri sunabilir.
İyi çalışmalar.