Veritabanı Yönetiminde ACID İlkelerinin Temellerini Anlama

Yunus Emre Alpu
Turk Telekom Bulut Teknolojileri
2 min readNov 11, 2023

Yakın zamanda yapılan bir mülakat sırasında bana veritabanı yönetimi veya yazılım geliştirme bağlamında “ACID” terimine aşina olup olmadığım soruldu. Bu terimi daha önce duymuş olsam da anlamından emin değildim. Mülakatı yapan kişiye anladığım kadarıyla kısa bir açıklama yaptım ve o da “Hmm…tamam” diye cevap verdi. Bu makalede ACID prensibini, önemini, gerçek dünyadaki kullanım durumlarını inceleyeceğiz.

ACID ilkelerine ve bunların önemine geçmeden önce transaction ve anlamını tartışalım.

İşlem (Transaction):

Bir veritabanı bağlamında “işlem”, yalnızca içindeki tüm işlemlerin başarılı olması halinde başarılı olan bir grup veritabanı okuma ve yazma işlemidir. Bu kavramı açıklamak için klasik bir örnek üzerinden gidelim. Kişisel bir hesaptan iş hesabına bir transfer yaptığınızı düşünün. İki eylemin gerçekleşmesi gerekiyor

Hesabınız borçlandırılır (bu transferi yapmak için yeterli paranız varsa) ve hesap bakiyeniz buna göre güncellenir.

İş hesabınız aktarılan tutarla alacaklandırılır ve hesap bakiyesi buna göre güncellenir.

Bu iki işlemin gerçekleşmesi gerekir ya da hiçbiri gerçekleşmez. Sistemi tutarlı tutmak için, bu işlem sırasında arada bir durum olamaz. Temel anlamda, bir işlem tamamen bununla ilgilidir.

A.C.I.D Bir işlemin özellikleri

ACID, Atomicity, Consistency, Isolation ve Durability kelimelerinin kısaltmasıdır ve bir işlemi tanımlayan özellikleri ifade eder. Bu ACID özellikleri, bir dizi veritabanı işleminin beklenmedik hatalar durumunda bile veritabanını geçerli bir durumda bırakmasını sağlar. ACID işlemleri, bir tablodaki her okuma, yazma veya değişikliğin aşağıdaki özelliklere sahip olduğunu garanti eder:

Atomicity (Bütünlük):
Verilerdeki tüm değişiklikler tek bir işlemmiş gibi gerçekleştirilir. Yani, tüm değişiklikler gerçekleştirilir ya da hiçbiri gerçekleştirilmez. Bu önemlidir çünkü çökme veya elektrik kesintisi gibi öngörülemeyen bir senaryo durumunda veritabanının durumundan emin olabiliriz. İşlemin herhangi bir yönü başarısız olursa, ya başarıyla tamamlanmış ya da geri alınmış olacaktır.

Yukarıdaki örnekle devam edersek, hesaptan para düşülürse ve işlem başarısız olursa, değişiklikler atılır ve işlem gerçekleşmez.

Consistency (Tutarlılık):
Tutarlılık, işlemlerin tablolarda yalnızca önceden belirlenmiş, öngörülebilir değişiklikler yapmasını sağlar. İşlemsel tutarlılık, veri bozulmalarının veya hatalarının tablonuzun bütünlüğü üzerinde istenmeyen etkilere yol açmamasını sağlar.

Önceki senaryoya geri dönelim ve kişisel hesabınızdan iş hesabınıza bir kez daha para aktarmak istediğinizi, ancak bakiyenizin negatif olduğunu varsayalım. Hesabınızın gereksinimleri karşılamadığını bilmenize rağmen, yine de aktarım yapmaya çalışıyorsunuz. İşlemin bütünlüğünü bozmuş olursunuz ve sonuç olarak işlem başarısız olur.

Isolation (Yalıtım):
İzolasyon, tek veya birden fazla işlemi aynı anda yöneten işlemsel bir sistemin kritik bir özelliğidir. Birbiriyle etkileşimi önlemek için her bir işlem için izole bir ortam oluşturulur. Bunun iyi bir örneği, 150 liralık bir para çekme işlemi için iki işlemin aynı anda başlaması ve her bir işlemin bağımsız olarak gerçekleştirilmesidir. Bu, her iki işlem de tamamlandığında bakiyenin 150 TL yerine 0 TL olmasını sağlar.

Durability(Dayanıklılık):
Bir işlem başarıyla tamamlandıktan sonra, verilerdeki değişiklikler devam eder ve bir sistem arızası durumunda bile geri alınmaz. Örneğin, bir hesaptan diğerine para aktaran bir uygulamada, dayanıklılık özelliği her bir hesapta yapılan değişikliklerin geri alınmamasını sağlar.

--

--