Ana içeriğe geç

ACID

Atomiklik, Tutarlılık, Yalıtım, Dayanıklılık

Okunuşu
esid
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/acid

Kısaca

ACID; atomiklik, tutarlılık, yalıtım ve dayanıklılıktan oluşan, hata ya da çökme olsa bile veritabanı transaction'larını güvenilir tutan dört garantidir.

ACID nedir?

ACID, bir veritabanı transaction'ının sahip olması gereken dört özelliğin kısaltmasıdır: atomiklik (atomicity), tutarlılık (consistency), yalıtım (isolation) ve dayanıklılık (durability). Transaction, veritabanının tek bir iş birimi olarak ele aldığı okuma ve yazma grubudur. Dört özellik birlikte, iki kullanıcı veriyi aynı anda değiştirse, bir sorgu yarıda başarısız olsa ya da sunucu elektriği kaybetse bile verinizin doğru kalacağını vaat eder.

Atomiklik hep ya da hiç demektir: transaction'daki ya tüm ifadeler etkili olur ya da hiçbiri; bir başarısızlık, kısmi değişiklikleri geri alan bir rollback tetikler. Tutarlılık, bir transaction'ın veritabanını geçerli bir durumdan başka bir geçerli duruma taşıması, birincil anahtarlar, yabancı anahtarlar ya da CHECK kısıtları gibi kuralları asla bozmaması demektir. Yalıtım, eşzamanlı transaction'ların birbirlerinin bitmemiş işini görmemesi demektir; dayanıklılık ise bir transaction onaylandığında değişikliklerinin, genellikle bir write-ahead log aracılığıyla kalıcı depolamaya yazıldığı için çökmelerden sağ çıkması demektir.

Banka havalesi klasik benzetmedir. Alice'ten Bob'a 100 dolar aktarmak iki güncelleme, yani bir borç ve bir alacak gerektirir; ACID ise aralarında bir şey başarısız olursa paranın ortadan kaybolmamasını ya da yoktan var olmamasını sağlar. PostgreSQL, MySQL ve SQLite gibi ilişkisel veritabanları ACID uyumludur ve birçok NoSQL veritabanı da artık, bazen sınırlarla birlikte, ACID transaction'ları sunar.

ACID çoğu zaman BASE (basically available, soft state, eventually consistent) ile karşılaştırılır; BASE, erişilebilirliği ve hızı tercih eden bazı dağıtık veritabanlarının kullandığı daha gevşek bir modeldir. Ayrıca ACID'deki C'nin CAP teoremindeki C olmadığını unutmayın: ACID'de tutarlılık verinin veritabanının kurallarına uyması demektir, CAP'te ise her düğümün en son yazmayı döndürmesi. Son olarak yalıtım mutlak değil, bir yelpazedir ve birçok veritabanı daha iyi performans için varsayılan olarak read committed gibi daha zayıf bir yalıtım düzeyi kullanır.

Önemli noktalar

  • Atomiklik: bir transaction ya tamamen başarılı olur ya da tamamen geri alınır.
  • Tutarlılık: her transaction veriyi veritabanının kurallarına göre geçerli bırakır.
  • Yalıtım: eşzamanlı transaction'lar birbirlerinin bitmemiş işine karışmaz.
  • Dayanıklılık: onaylanmış değişiklikler çökmelerden ve elektrik kesintilerinden sağ çıkar.
  • ACID'deki C, CAP teoremindeki C ile aynı değildir.

Örnek

ACID transaction olarak bir banka havalesisql
-- Move $100 from account 1 to account 2 as one atomic unit
BEGIN;

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

-- If anything above failed, run ROLLBACK instead to undo both updates
COMMIT;

Sık sorulan sorular

NoSQL veritabanları ACID uyumlu mudur?

Bazıları öyledir. Birçok doküman ve anahtar-değer veritabanı artık tek bir kayıt içinde ya da bazı sınırlarla birkaç kayıt boyunca ACID transaction'ları destekler; diğerleri ise ölçek ve hız için daha zayıf garantileri seçer. Tam olarak neyi garanti ettiği için her veritabanının belgelerine bakın.

ACID ile BASE arasındaki fark nedir?

ACID doğruluğa öncelik verir: her transaction hep ya da hiçtir ve veriyi hemen tutarlı bırakır. BASE ise (basically available, soft state, eventually consistent), erişilebilirliğe öncelik verir ve veri kopyalarının yakınsamadan önce kısa süre uyuşmamasına izin verir.

Transaction yalıtım düzeyleri nedir?

Yalıtım düzeyleri, eşzamanlı transaction'ların birbirlerinin değişikliklerinden ne kadarını görebileceğini belirler. SQL standardı en zayıftan en güçlüye dört tane tanımlar: read uncommitted, read committed, repeatable read ve serializable. Daha güçlü düzeyler daha fazla anomaliyi önler ancak verimi düşürebilir.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar