0Pricing
SQL Interview Prep · Ders

ACID Özelliklerini Açıklama

Somut örneklerle atomiklik, tutarlılık, yalıtım ve kalıcılık.

ACID Özelliklerini Açıklama, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Mülakat Yapanlar ACID Hakkında Neden Soru Sorar

Kıdemli bir mülakat yapan “ACID'i adım adım açıklayın” dediğinde, dört kelimeyi ezberleyip ezberlemediğinizi sınamıyordur. Birçok kullanıcı aynı anda eriştiğinde veritabanının neyi garanti ettiğini anlayıp anlamadığınızı bilmek ister.

ACID; Atomiklik, Tutarlılık, Yalıtım ve Kalıcılık anlamına gelir. Her işlem tabanlı veritabanı (PostgreSQL, MySQL/InnoDB, SQL Sunucusu, Oracle), bir işlem içinde yürütülen çalışmalar için bu dört özelliği sunar.

En güçlü yanıtlar, her harfi önlediği somut bir arızayla ilişkilendirir. Sonraki bölümlerde tam olarak bunu yapacağız.

İşlem Nedir?

İşlem, veritabanının tek ve bölünemez bir adım olarak ele aldığı iş birimidir. İşlemi BEGIN ile başlatır, bir veya daha fazla ifade çalıştırır, ardından kalıcı hâle getirmek için COMMIT eder veya her şeyi geri almak için ROLLBACK uygularsınız.

Klasik örnek banka transferidir: bir hesabı borçlandırıp diğerini alacaklandırırsınız. İkisinin de gerçekleşmesi gerekir; aksi hâlde hiçbiri gerçekleşmemelidir. İşlem, bu taahhüdü yerine getirmenizi sağlayan kapsayıcıdır.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

A = Atomiklik

Atomiklik, bir işlemin ya hep ya hiç olması demektir. Herhangi bir ifade başarısız olursa veya sunucu işlem sürerken çökerse, işlemdeki tüm değişiklikler işlem hiç başlamamış gibi geri alınır.

Transfer örneğinde, alacaklandırma borçlandırma başarılı olduktan sonra başarısız olursa atomiklik, borçlandırmanın da geri alınmasını garanti eder. Yarım kalmış bir işlem yüzünden paranızı asla kaybetmezsiniz.

Mülakatta kullanılabilecek ifade: "Atomiklik, işlemin bir bütün olarak işlenmesini ya da hiç işlenmemesini sağlar; geride kısmi bir durum bırakmaz."

Uygulamada Atomiklik

Burada ikinci güncelleme bir CHECK kısıtını ihlal ediyor (bakiye negatif olamaz). Veritabanı işlemi iptal ediyor ve ROLLBACK ilk güncellemeyi de geri alıyor.

Mülakatlar için kilit nokta şudur: geri alma işleminden sonra 1 numaralı hesabın bakiyesi hâlâ başlangıçtaki bakiyesidir. Tabloda kısmi bir yazma işlemi bulunmaz.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- next line fails: balance would go below 0
UPDATE accounts SET balance = balance - 999999 WHERE id = 2;
ROLLBACK;  -- account 1 is restored to its original balance

C = Tutarlılık

Tutarlılık, bir işlemin veritabanını geçerli bir durumdan başka bir geçerli duruma taşıması demektir. COMMIT edilen her işlem, tanımlanmış tüm kurallara uymalıdır: kısıtlar, yabancı anahtarlar, tetikleyiciler ve kademeli işlemler.

Bir işlem bir kısıtı ihlal edilmiş durumda bırakacaksa (yetim kalmış bir yabancı anahtar, yinelenen bir birincil anahtar veya başarısız bir CHECK), veritabanı işlemi COMMIT etmeyi reddeder.

Belirtilmesi gereken incelik: veritabanı bildirilen kuralları uygular; ancak uygulama düzeyindeki değişmezler ("bir kullanıcı en fazla 3 etkin oturuma sahip olabilir"), kısıt olarak modellenmedikleri sürece sizin sorumluluğunuzdadır.

Kısıtlarla Sağlanan Tutarlılık

Tutarlılık, büyük ölçüde şema kurallarınızın toplamıdır. Aşağıdaki örnekte yabancı anahtar, mevcut olmayan bir müşteri için hiçbir zaman sipariş ekleyememenizi garanti eder.

Ekleme işlemi mevcut olmayan bir müşteriye başvuruyorsa işlem başarısız olur, atomiklik işlemi geri alır ve tutarlılık korunur. Mülakat yapanların atomiklik ile tutarlılığın birlikte çalıştığını söylemesinin nedeni budur.

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT NOT NULL REFERENCES customers(id),
  amount NUMERIC(10,2) CHECK (amount > 0)
);

-- This fails if customer 999 does not exist, keeping data consistent
INSERT INTO orders (id, customer_id, amount) VALUES (1, 999, 50.00);

I = Yalıtım

Yalıtım, eşzamanlı işlemlerin birbirinin işine engel olmaması demektir. İdeal durumda her işlem, aynı anda onlarca işlem çalışıyor olsa bile tek başına çalıştırılmış gibi davranır.

Uygulamada veritabanları, katılık ile performans arasında denge kuran farklı yalıtım düzeyleri sunar. Daha zayıf düzeyler, daha yüksek eşzamanlılık karşılığında belirli anomalilere (kirli okumalar, hayalet okumalar) izin verir.

Bu, herhangi bir ACID mülakatının en kapsamlı bölümüdür; bu nedenle sonraki iki derste yalıtım düzeyleri ve okuma anomalileri ayrıntılı olarak ele alınacaktır.

Yalıtım Neden Bir Yelpazedir

Kusursuz yalıtım (SERIALIZABLE) maliyetlidir; çünkü genellikle işlemleri kilitleyerek veya iptal ederek olası her iç içe geçme çakışmasını önlemesi gerekir.

Bu nedenle SQL standardı dört düzey tanımlar. Yaygın bir mülakat yanılgısı şudur: adaylar yalıtımın ikili olduğunu varsayar. Öyle değildir. Ne kadar yalıtım istediğinizi açıkça seçersiniz.

  • READ UNCOMMITTED en zayıf
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE en güçlü
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
-- ... business logic ...
COMMIT;

D = Kalıcılık

Kalıcılık, bir işlem COMMIT edildiğinde değişikliklerinin çökme, elektrik kesintisi ve yeniden başlatma sonrasında da korunması demektir. COMMIT edilmiş bir işlem kalıcı depolamadadır.

Veritabanları bunu önceden yazma günlüğü (WAL) ile sağlar: değişiklikler, veri dosyaları güncellenmeden önce kalıcı bir günlüğe yazılır. Yeniden başlatıldığında motor, ana dosyalara henüz ulaşmamış COMMIT edilmiş değişiklikleri kurtarmak için günlüğü yeniden oynatır.

Mülakatta kullanılabilecek ifade: "Kalıcılık WAL tarafından garanti edilir; COMMIT yalnızca günlük kaydı diske aktarıldıktan sonra döner."

Banka Transferini Bir Arada İnceleme

Tek bir transfer, dört özelliğin tamamını aynı anda gösterir:

  • Atomiklik: her iki güncelleme de uygulanır veya hiçbiri uygulanmaz.
  • Tutarlılık: bir CHECK, bakiyelerin negatif olmamasını sağlar.
  • Yalıtım: eşzamanlı bir okuyucu, transferin yarım kalmış hâlini görmez.
  • Kalıcılık: COMMIT sonrasında yeni bakiyeler çökmeden sonra da korunur.

Tek bir örneği dört harfin tamamıyla ilişkilendirebilmek, mülakatta puan kazandıran tam olarak şeydir.

BEGIN;
UPDATE accounts SET balance = balance - 100
  WHERE id = 1 AND balance >= 100;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Sık Sorulan Ek Sorular

Mülakat yapanlar sık sık sınır durumlarını sorgular. Şunlara hazır olun:

  • "Yabancı anahtar hangi özelliği zorunlu kılar?" Tutarlılık.
  • "İşlem sürerken sunucunun çökmesine karşı sizi ne korur?" Atomiklik (COMMIT edilmemiş işlemin ROLLBACK edilmesi) ve kalıcılık (COMMIT edilmiş işlemin yeniden oynatılması) birlikte korur.
  • "Yalıtım ücretsiz midir?" Hayır, daha sıkı yalıtım eşzamanlılığa mal olur.
  • "NoSQL depoları ACID sağlar mı?" Birçok NoSQL deposu kullanılabilirlik için ACID'den (BASE) ödün verir; bunun motora bağlı olduğunu söyleyin.

Hızlı Kontrol

Hangi ACID özelliğinin ne yaptığını ne kadar iyi kavradığınızı sınayın.

Özet: ACID Tek Nefeste

Artık soruyu açıkça yanıtlayabilirsiniz:

  • Atomiklik - ya hep ya hiç; kısmi çalışma geri alınır.
  • Tutarlılık - her COMMIT kısıtlara uyar ve geçerli bir durum bırakır.
  • Yalıtım - eşzamanlı işlemler birbirini bozmaz; katılık ayarlanabilir.
  • Kalıcılık - COMMIT edilmiş veriler, önceden yazma günlüğü tarafından korunarak çökmelerden sonra da varlığını sürdürür.

Her harfi, önlediği somut bir arızayla ilişkilendirirseniz her türlü eşzamanlılık mülakatının giriş bölümünü başarıyla geçersiniz.

Sıkça Sorulan Sorular

“ACID Özelliklerini Açıklama” dersi ücretsiz mi?

Evet — “ACID Özelliklerini Açıklama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“ACID Özelliklerini Açıklama” dersinde ne öğreneceğim?

Somut örneklerle atomiklik, tutarlılık, yalıtım ve kalıcılık. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“ACID Özelliklerini Açıklama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ACID Özelliklerini Açıklama
  2. Dört Yalıtım Düzeyi
  3. Kirli, Tekrarlanamayan ve Hayalet Okumalar
  4. Kilitlenmeler, Kilitleme ve MVCC
← SQL Interview Prep Sayfasına Dön