data-infra
Sözlük ↗ACID
ACID, bir veritabanı transaction'ının güvenilir sayılması için garanti etmesi gereken dört özelliğin kısaltmasıdır: Atomicity / Bütünlük (bir transaction ya tamamen tamamlanır ya da hiçbir etkisi olmaz — bir şey ortada başarısız olursa geride kısmi güncelleme kalmaz), Consistency / Tutarlılık (bir transaction, veritabanını her zaman bir geçerli durumdan başka bir geçerli duruma taşır, foreign key veya benzersizlik gibi tanımlı kısıtları asla ihlal etmez), Isolation / İzolasyon (eşzamanlı transaction'lar birbirini etkilemez — devam eden bir transaction, başka bir transaction'ın henüz commit edilmemiş değişikliklerini görmez) ve Durability / Kalıcılık (bir transaction commit edildikten sonra, sonraki bir çökmeden sağ çıkar — veri gerçekten kalıcı depolamaya yazılmıştır, sadece bellekte tutulmaz). AI/SaaS geliştiricileri için neden önemli: ACID garantileri, faturalama, abonelik ve paraya dokunan her türlü mantığı bir ilişkisel veritabanı üzerine, "ya sunucu tam olarak kartı tahsil etmekle aboneliği kaydetmek arasında çökerse" gibi uç durumları sürekli endişe etmeden inşa etmeyi güvenli kılan şeydir. PostgreSQL, MySQL ve neredeyse tüm ana akım ilişkisel veritabanları tam olarak ACID uyumludur; bu, daha yeni ve özel veri depolarıyla dolu bir çağda bile ilişkisel veritabanlarının bir SaaS'ın çekirdek transactional verisi için varsayılan seçim olarak kalmasının başlıca nedenlerinden biridir. AI'ya bitişik veri depolarının çoğu farklı bir ödünleşim yapar: birçok vektör veritabanı ve NoSQL sistemi, daha yüksek yazma verimi veya daha kolay yatay ölçeklenme karşılığında bilinçli olarak bazı ACID garantilerini (genellikle consistency veya isolation) gevşetir — embedding'ler ve olay logları için meşru bir ödünleşim, ama bir müşterinin abonelik kaydı için yanlış ödünleşim. Nasıl çalışır: transaction'lar açıkça sınırlandırılır (`BEGIN`, ardından bir dizi ifade, sonra `COMMIT` veya `ROLLBACK`) ve veritabanı motoru dört özelliğin tümünü zorunlu kılmayı içeride kendisi yönetir — kalıcılık ve bütünlük için write-ahead logging, izolasyon için kilitleme veya multi-version concurrency control (MVCC, Postgres'in kullandığı yöntem) ve tutarlılık için kısıt kontrolü kullanarak. Somut örnek: bir SaaS'ın checkout akışının hem bir ödeme yöntemini tahsil etmesi hem de bir abonelik kaydı oluşturması gerekir — her ikisi de ya birlikte başarılı olmalı ya da birlikte başarısız olmalı, asla yalnızca biri değil. Her ikisini tek bir veritabanı transaction'ında sarmalamak (`BEGIN; INSERT INTO payments ...; INSERT INTO subscriptions ...; COMMIT;`) atomicity'yi garanti eder: sunucu ödeme insert'inden sonra ama abonelik insert'inden önce çökerse ya da bir hata oluşursa, transaction'ın tamamı geri alınır ve karşılığında abonelik olmayan başıboş bir ödeme kaydı kalmaz — bu, aksi halde tespit edip düzeltmek için kırılgan manuel uzlaştırma (reconciliation) mantığı gerektirecek bir başarısızlık modudur.
İlgili terimler