Datomic: genel amaçlı bir kayıt sistemi veritabanı
# Datomic'in arka planı
- Datomic, kayıt sistemleri için genel amaçlı bir veritabanıdır.
- Veritabanı durumu
[entity, attribute, value] (EAV) üçlüleriyle ifade edilir; bunlara datom denir.
- Şema, özelliklerin türünü ve kardinalitesini kontrol eder.
- Zamanı açıkça modelleyen bir zamansal veritabanıdır.
- Her işlem, mantıksal zaman damgası
t ve duvar saati zamanı txInstant ile tanımlanır.
- İşlemler datom ekleyebilir veya kaldırabilir.
- Tüm datom'lar işlem referansını korur.
- Veritabanı, bu tuple'ların sürekli büyüyen bir kümesidir.
# Datomic'in özellikleri
- Kullanıcılar veritabanının anlık görüntüsünü mantıksal zaman veya duvar saati zamanı üzerinden isteyebilir.
- Veritabanının tüm geçmişi görülebilir.
- Datalog tarzı API, bildirimsel grafik gezinti API'si ve ODM tarzı
Entity veri tipi üzerinden sorgulama yapılabilir.
- İki sürüm vardır: Datomic Pro ve Datomic Cloud.
# 1.1 Mimari
- Datomic Pro, birlikte çalışan birden çok servisten oluşur.
- Transactor'lar yazma işlemlerini yürütür, indeksleri korur ve veriyi depoya yazar.
- Peer'ler kalın istemcilerdir; JVM kütüphanesi içerir, işlem gönderir, sorgu çalıştırır ve sonuçları önbelleğe alır.
- Client'lar ince istemcilerdir; işlem ve sorguları peer sunucusuna iletir.
- Her işlem log'a zaman sırasıyla eklenir.
- Veriler, Cassandra veya DynamoDB gibi veri depolarında kalıcı ve değiştirilemez ağaçlar olarak saklanır.
- Global işlem sırasını güvenceye almak için Sequential CaS işlemleri kullanılır.
- Peer'ler depolama katmanına ve transactor'lara doğrudan bağlanır.
# 1.2 İşlem modeli
- Datomic kendine özgü bir işlem modeline sahiptir.
- Okuma ve yazma yollarını kesin biçimde ayırır.
- Okumalar, veritabanının değiştirilemez durumunu alır.
- Yazma işlemleri, sıralı bir işlem listesi olarak ifade edilir.
- İşlem fonksiyonları veritabanı durumunu okur ve yeni bir işlem kümesi döndürür.
- İşlem fonksiyonları çağırana değer döndürmez.
- İşlemler yalnızca etkileri döndürür.
- NuBank, finansal hizmet sunmak için Datomic kullanır.
# 1.3 Tutarlılık
- ACID işlemleri sunduğunu belirtir ve tutarlılık modeli ile dayanıklılık garantilerini açık biçimde vaat eder.
- İşlemler tek bir atomik yazma olarak kaydedilir.
- Tüm peer'ler belirli bir ana kadar tamamlanmış işlemleri görür.
- Serializable işlemler garanti edilir.
- En güncel durumla senkron olmak için d/sync çağrılabilir.
- Tek yazarlı bir sistem olarak tasarlanmıştır, ancak birden çok transactor aynı anda çalışabilir.
# 2 Test tasarımı
- Datomic test paketini tasarlamak için Jepsen test kütüphanesi kullanıldı.
- Datomic Pro 1.0.7075, Debian Bookworm düğüm kümesine kuruldu.
- AWS üzerinde DynamoDB tablosu sağlandı.
- Testler, Transactor ve Peer içeren çeşitli düğümlerde çalıştırıldı.
- Test paketi işlemleri HTTP API üzerinden yürütüldü.
- Ağ bölünmesi ve Garbage Collection dahil çeşitli hatalar enjekte edildi.
- Transactor'ları yeniden başlatmak için systemd servisleri kullanıldı.
# 2.1 Listeye ekleme
- Listeye ekleme işlemlerini tasarlamak için Elle işlem denetleyicisi kullanıldı.
- Her liste bir birincil anahtar ile tanımlandı.
- Okuma ve ekleme işlemleri içeren işlemler yürütüldü.
- Datomic, çok değerli özellikleri sıralanmamış kümeler olarak saklar.
- İşlem fonksiyonları, okuma-yazma işlemlerini ifade etmek için kullanıldı.
# 2.2 CaS ile listeye ekleme
- db/cas fonksiyonu, bir özelliğin eşzamanlı güncellemelerini kontrol etmek için kullanıldı.
- Snapshot isolation sağlamak için CaS deseni kullanıldı.
- Her liste, tek değerli, virgülle ayrılmış bir string olarak kodlandı.
# 2.3 İç tutarlılık
- İç tutarlılığı ölçmek için işlemler tasarlandı.
- Bunlar, özellik değerini birden çok kez değiştiren veya olguları ekleyip kaldıran işlemleri içerir.
- CaS işlemleri birden çok kez yürütüldü.
# 2.4 Onay
- Onay ve reddi simüle eden bir durum makinesi tasarlandı.
- Onay ve ret fonksiyonları ilgili durumu kontrol eder ve işlemi iptal eder.
# 3 Sonuçlar
- Datomic'in temel güvenlik iddialarını ihlal eden bir davranış bulunmadı.
- İşlemler toplam sıralı biçimde yürütülmüş gibi göründü.
- (d/sync conn) kullanılan okuma işlemleri gerçek zaman sırasıyla uyumluydu.
- İç tutarlılık, Datomic belgeleriyle uyumluydu, ancak tipik veritabanı davranışından farklıydı.
# 3.1 İç tutarlılık
- Çoğu veritabanı, işlem içinde seri yürütme semantiği sağlar.
- Datomic, işlem içindeki tüm işlemleri eşzamanlı yürütme olarak ele alır.
- İşlem fonksiyonları, yalnızca işlemin başlangıç anındaki veritabanı durumunu gözlemler.
- Tek kardinaliteli özellikler için çakışma oluşursa işlem iptal edilir.
# 3.2 Sanal write skew
- İşlem fonksiyonları eşzamanlı çalıştığı için, tek tek doğru olan fonksiyonlar birlikte çalıştıklarında yanlış sonuçlar üretebilir.
- Onay ve ret fonksiyonları aynı işlem içinde çağrılırsa, onay ve ret aynı anda gerçekleşebilir.
- Bu durum Datomic belgeleriyle uyumludur, ancak kullanıcılar için şaşırtıcı olabilir.
# 3.3 Entity predicate
- Entity predicate kullanılarak veritabanı değişmezleri garanti altına alınabilir.
- Tür, benzersizlik ve keyfi predicate'ler dahil çeşitli kısıtlar sağlar.
- Entity predicate, veritabanının tüm durumunu inceleyerek işleme izin verilip verilmeyeceğine karar verir.
- Değişmezleri sağlamak için onay ve ret fonksiyonlarına entity predicate eklendi.
GN⁺ görüşü
- Datomic, zamansal bir veritabanı olarak verinin geçmiş durumlarını kolayca sorgulatabildiği için finansal hizmetler gibi kayıt sistemlerinde çok kullanışlıdır.
- İşlem fonksiyonlarının eşzamanlı yürütme modeli performansı artırır, ancak kullanıcılara alışılmadık gelebilir.
- Entity predicate ile karmaşık veri bütünlüğü kısıtları kolayca uygulanabilir.
- NuBank gibi büyük ölçekli finansal hizmetlerde kullanılması, kararlılık ve ölçeklenebilirliğinin doğrulandığını gösterir.
- Datomic'in özgün işlem modeli, geleneksel veritabanlarından farklı bir düşünme biçimi gerektirdiğinden bir öğrenme eğrisi olabilir.
1 yorum
Hacker News görüşü
Hacker News yorumlarından derlenmiş özet
İlgi çekici tartışma ve dokümantasyon iyileştirmesi
Datomic'in işlem davranışını anlama
Datomic raporunun değeri
Jepsen adının kökeni
Clojure programı yazmaya yardım
Datomic benzeri bir veri deposu kurmak
Datomic'in veri modeli
Datomic dokümantasyonunun netleştirilmesi
Tek iş parçacıklı tasarımın avantajları
Datomic'in işlem özellikleri