Ana içeriğe geç

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ı oku

BASE

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ı oku

ACID ve BASE karşılaştırması

ÖzellikACIDBASE
AçılımıAtomiklik, tutarlılık, yalıtım, dayanıklılıkTemelde erişilebilir, esnek durum, nihai tutarlılık
ÖncelikHer transaction'ın doğruluğuErişilebilirlik ve ölçek
Bir yazmadan sonraCommit edilen veri hemen görünürReplikalar bir süre eski değeri döndürebilir
Ağ bölündüğündeDoğru kalmak için istekleri reddedebilir ya da geciktirebilirBelki eskimiş veriyle de olsa yanıt vermeyi sürdürür
ÖlçeklenmeTek sunucuda en basit; çok sunucuda daha zorPek çok sunucuya ve bölgeye yayılmak için tasarlanmıştır
Tipik sistemlerPostgreSQL, MySQL, SQLite, dağıtık SQL veritabanlarıCassandra, varsayılan hâliyle DynamoDB, DNS, önbellekler
En uygunÖdemeler, siparişler, stok ve rezervasyonlarAkış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.

Daha fazla

Ayarlar