Yan yana
ACIDvsBASE
ACID ile BASE arasındaki fark nedir?
Güncellendi 3 dk okuma7 fark
Kısaca
ACID her transaction'ı doğru ve anında görünür kılar; BASE ise sistem erişilebilir ve ölçeklenebilir kalsın diye replikaların kısa süre ayrışmasına izin verir.
ACID
Atomiklik, Tutarlılık, Yalıtım, Dayanıklılık
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 sayfasını okuBASE
Temelde Erişilebilir, Esnek Durum, Nihai Tutarlılık
BASE, anlık tutarlılık yerine erişilebilirliği seçen dağıtık veritabanlarını tanımlar: hep yanıt verirler, veri kopyaları ise kısa süre farklı kalabilir.
BASE sayfasını okuACID ve BASE karşılaştırması
| Özellik | ACID | BASE |
|---|---|---|
| Açılımı | Atomiklik, tutarlılık, yalıtım, dayanıklılık | Temelde erişilebilir, esnek durum, nihai tutarlılık |
| Öncelik | Her transaction'ın doğruluğu | Erişilebilirlik ve ölçek |
| Bir yazmadan sonra | Commit edilen veri hemen görünür | Replikalar bir süre eski değeri döndürebilir |
| Ağ bölündüğünde | Doğru kalmak için istekleri reddedebilir ya da geciktirebilir | Belki eskimiş veriyle de olsa yanıt vermeyi sürdürür |
| Ölçeklenme | Tek sunucuda en basit; çok sunucuda daha zor | Pek çok sunucuya ve bölgeye yayılmak için tasarlanmıştır |
| Tipik sistemler | PostgreSQL, MySQL, SQLite, dağıtık SQL veritabanları | Cassandra, varsayılan hâliyle DynamoDB, DNS, önbellekler |
| En uygun | Ödemeler, siparişler, stok ve rezervasyonlar | Akışlar, sayaçlar, kataloglar, sensör verisi ve analitik |
Fark, açıklamalı
ACID ve BASE, bir veritabanının verileriniz hakkında verebileceği iki ayrı söz kümesidir. Atomiklik, tutarlılık, yalıtım ve dayanıklılığın kısaltması olan ACID; her transaction'ın ya tamamen ya da hiç gerçekleşmeyeceğini, veritabanının kurallarına uyacağını, diğer transaction'ların bitmemiş işini görmeyeceğini ve commit edildikten sonra bir çökmeden sağ çıkacağını vaat eder. Temelde erişilebilir, esnek durum ve nihai tutarlılık anlamına gelen BASE ise daha azını vaat eder: sistem yanıt vermeyi sürdürür; kısa süre farklı kalan replikalar da yazmalar durduğunda aynı değerde buluşur.
Fark, verinin dağıtık olmasından doğar. Tek bir sunucuda ACID görece ucuzdur. Pek çok sunucu ve veri merkezi boyunca her kopyayı yanıt vermeden önce uzlaştırmak ağı beklemek demektir; sunucular arasındaki ağ koptuğunda da sistem, istekleri reddetmekle eskimiş olabilecek veriyi sunmak arasında seçim yapmak zorunda kalır. ACID sistemleri doğruluğu seçer ve yazmaları yavaşlatabilir ya da reddedebilir; varsayılan modlarındaki Apache Cassandra ya da Amazon DynamoDB gibi BASE sistemleri ise erişilebilirliği seçer ve kopyaların arka planda yetişmesine izin verir.
Doğru model, kısa süreli bir tutarsızlığın neye mal olacağına bağlıdır. Bir banka havalesi, bir stok sayımı ya da bir koltuk rezervasyonu ACID ister; çünkü iki kullanıcı son ürünü asla birlikte alamamalıdır. Bir beğeni sayacı, bir sosyal akış, bir ürün kataloğu ya da DNS birkaç saniyelik farkla yaşayabilir; BASE de bu farkı hız ve hatalara karşı direnç karşılığında kabul eder. Pek çok sistem ikisini karıştırır: siparişler ACID bir veritabanına gider; önbellekler, arama indeksleri ve analitik kopyalar ise nihai tutarlıdır.
Sık yapılan bir yanlış, SQL'in ACID, NoSQL'in ise BASE demek olduğunu düşünmektir. MongoDB, DynamoDB ve Cassandra dahil pek çok NoSQL veritabanı artık transaction'lar ya da istek başına daha güçlü tutarlılık seviyeleri sunuyor; dağıtık SQL veritabanları da pek çok sunucu boyunca ACID sağlıyor. Bir diğer yanlış, ACID'deki C'yi, yani verinin veritabanının kurallarına uymasını, CAP teoremindeki C ile, yani her düğümün en son yazmayı döndürmesiyle karıştırmaktır.
Hangisini kullanmalısınız?
ACID şu durumlarda doğru seçim:
- Para, stok seviyeleri ya da rezervasyonlar değişiyor ve hiçbir çakışma gözden kaçmamalı.
- Birbiriyle ilişkili birkaç yazma birlikte başarılı ya da birlikte başarısız olmalı.
- Kullanıcılar yaptıkları değişikliği hemen ardından görmeli.
- Verileriniz tek bir birincil sunucuya ya da dağıtık bir SQL veritabanına sığıyor.
BASE şu durumlarda doğru seçim:
- Sistem, sunucular ya da bağlantılar koptuğunda bile okuma ve yazma kabul etmeyi sürdürmeli.
- Veri pek çok sunucuya ya da bölgeye yayılmış ve ucuza ölçeklenmesi gerekiyor.
- Eski bir beğeni sayısı gibi birkaç saniyelik bayat veri zarar vermiyor.
- Yazma hacmi çok büyük ve olaylar, günlükler ya da sensör ölçümleri gibi nadiren çakışıyor.
Sık sorulan sorular
BASE, ACID'in tersi mi?
Tam olarak değil. İsimler kimyadan bir kelime oyunudur, ama ikisi bir yelpazenin iki ucudur ve pek çok veritabanı istek başına daha güçlü ya da daha zayıf bir tutarlılık seviyesi seçmenize izin verir.
NoSQL veritabanları ACID uyumlu mu?
Bazıları öyle. MongoDB birden çok belgeye yayılan ACID transaction'ları destekler; DynamoDB ve Cassandra da sınırlarla birlikte transaction'lar ya da güçlü tutarlılık seçenekleri sunar. Bu yüzden her veritabanının neyi, hangi bedelle garanti ettiğine bakın.
Nihai tutarlılık pratikte ne demek?
Bir yazmadan sonra bazı okuyucular kısa bir süre, genellikle milisaniyelerden saniyelere kadar, eski değeri görmeye devam edebilir. Güncellemeler durduğunda her replika aynı değeri döndürür.