1 puan yazan GN⁺ 2024-05-17 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-05-17
Hacker News görüşü

Hacker News yorumlarından derlenmiş özet

  • İlgi çekici tartışma ve dokümantasyon iyileştirmesi

    • Çalışma sürecindeki tartışma oldukça ilgi çekiciydi. Jepsen'in kritik bir hata bulmamış olması da şaşırtıcıydı. Dokümantasyonu ve amaçlanan anormal davranışı netleştirmek faydalı bir sonuç oldu. Datomic kullanan bir bankayı işletme konusunda güven veren, yararlı bir alıştırmaydı.
  • Datomic'in işlem davranışını anlama

    • Jepsen raporunu ilk kez derinlemesine okudum ve Datomic'in işlem davranışına dair net açıklamayı beğendim. SQL veritabanlarından farkını aslında iyi anlamadığımı fark ettim. Datomic'in işlem yapısı ve öğe adlarının değiştirilmesi dikkat çekiciydi.
  • Datomic raporunun değeri

    • Oldukça ayrıntılı bir rapor; iyi bir veritabanı üzerine mükemmel bir analiz. Dokümantasyonun daha net hale gelmesi ve güncellenmesi de sevindirici. Keşke Apple, FoundationDB için de bir Jepsen analizi yaptırsaydı.
  • Jepsen adının kökeni

    • Jepsen adı, şarkıcı Carly Rae Jepsen'den geliyor. Dağıtık sistemler araştırması için mükemmel bir isim gibi görünüyor.
  • Clojure programı yazmaya yardım

    • Her zamanki gibi harika bir çalışma. Bu tür sistemler hakkında bir şeyler öğrenmek ve Clojure programları yazmaya yardımcı olan küçük bilgiler edinmek için okumayı seviyorum.
  • Datomic benzeri bir veri deposu kurmak

    • Son zamanlarda Datomic benzeri bir veri deposu kuruyorum; bu yüzden bu rapor faydalı görünüyor. MongoDB analizini de keyifle okudum; Redis, RethinkDB ve benzerleri hakkındaki analizlere de bakmanızı öneririm.
  • Datomic'in veri modeli

    • Triple store/RDF'ye aşinaysanız Datomic'in veri modeli sezgisel geliyor. Ancak dokümantasyonda ya da çevrimiçi tartışmalarda bundan sık söz edilmiyor. İnsanların bu kavramlara aşina olmamasından mı, yoksa semantik web ile ilişkisinin kafa karıştırıcı olabilmesinden mi kaynaklandığını merak ediyorum.
  • Datomic dokümantasyonunun netleştirilmesi

    • Jepsen, değişmezlik ihlali durumlarını netleştirdi; ancak Datomic'in yaklaşımı daha çok dokümantasyonu açıklığa kavuşturmaya odaklanmış gibi görünüyor. Datomic ekibi bu tür ihlalleri kullanıcı hatası olarak değerlendiriyor gibi.
  • Tek iş parçacıklı tasarımın avantajları

    • Yazma işlemlerini tek iş parçacığıyla ele alma yönündeki tasarım kararı etkiliydi. Datomic harika bir tasarımın ürünü ve onu yeniden kullanmak isterdim.
  • Datomic'in işlem özellikleri

    • Datomic'i çok kullanmadım ama işlemlerin temelde toplu işleme olması beni şaşırtmadı. Tek iş parçacığında çalıştığı için yarış durumu daha az; tasarım gereği yavaş ama güvenli.