1 poin oleh GN⁺ 2024-05-17 | 1 komentar | Bagikan ke WhatsApp

Datomic: basis data sistem pencatatan untuk tujuan umum

# Latar belakang Datomic

  • Datomic adalah basis data untuk tujuan umum bagi sistem pencatatan.
  • Status basis data direpresentasikan sebagai triple [entity, attribute, value] (EAV), yang disebut datom.
  • Skema mengontrol tipe dan kardinalitas atribut.
  • Ini adalah basis data temporal yang memodelkan waktu secara eksplisit.
  • Setiap transaksi diidentifikasi oleh stempel waktu logis t dan waktu dinding txInstant.
  • Transaksi dapat menambahkan atau menghapus datom.
  • Semua datom mempertahankan referensi transaksi.
  • Basis data adalah sekumpulan tuple yang terus bertambah.

# Fitur Datomic

  • Pengguna dapat meminta status snapshot basis data pada waktu logis atau waktu dinding.
  • Seluruh riwayat basis data dapat dilihat.
  • Dapat di-query melalui API bergaya Datalog, API traversal graf deklaratif, dan tipe data Entity bergaya ODM.
  • Ada dua versi: Datomic Pro dan Datomic Cloud.

# 1.1 Arsitektur

  • Datomic Pro terdiri dari beberapa layanan yang saling bekerja sama.
  • Transactor mengeksekusi transaksi tulis, memelihara indeks, dan menulis data ke penyimpanan.
  • Peer adalah klien tebal yang mencakup pustaka JVM untuk mengirim transaksi, menjalankan query, dan meng-cache hasil.
  • Client adalah klien tipis yang meneruskan transaksi dan query ke server peer.
  • Setiap transaksi ditambahkan ke log dalam urutan waktu.
  • Data disimpan sebagai tree yang persisten dan immutable di penyimpanan data seperti Cassandra atau DynamoDB.
  • Urutan transaksi global dijamin menggunakan operasi Sequential CaS.
  • Peer terhubung langsung ke penyimpanan dan transactor.

# 1.2 Model transaksi

  • Datomic memiliki model transaksi yang unik.
  • Ia memisahkan secara ketat jalur baca dan jalur tulis.
  • Pembacaan memperoleh status basis data yang immutable.
  • Transaksi tulis direpresentasikan sebagai daftar operasi yang terurut.
  • Fungsi transaksi membaca status basis data dan mengembalikan sekumpulan operasi baru.
  • Fungsi transaksi tidak mengembalikan nilai kepada pemanggil.
  • Transaksi hanya mengembalikan efek.
  • NuBank menggunakan Datomic untuk menyediakan layanan keuangan.

# 1.3 Konsistensi

  • Mengiklankan transaksi ACID, serta secara jelas menjanjikan model konsistensi dan jaminan durabilitas.
  • Transaksi disimpan sebagai satu penulisan atomik.
  • Semua peer melihat transaksi yang telah selesai hingga titik waktu tertentu.
  • Menjamin transaksi Serializable.
  • Status terbaru dapat disinkronkan dengan memanggil d/sync.
  • Dirancang sebagai sistem penulis tunggal, tetapi beberapa transactor dapat berjalan secara bersamaan.

# 2 Desain pengujian

  • Suite pengujian Datomic dirancang menggunakan pustaka pengujian Jepsen.
  • Datomic Pro 1.0.7075 dipasang pada klaster node Debian Bookworm.
  • Tabel DynamoDB diprovisikan di AWS.
  • Pengujian dijalankan pada berbagai node termasuk Transactor dan Peer.
  • Operasi suite pengujian dilakukan melalui HTTP API.
  • Berbagai kegagalan disuntikkan, termasuk partisi jaringan dan Garbage Collection.
  • Layanan systemd digunakan untuk me-restart transactor.

# 2.1 Penambahan daftar

  • Operasi penambahan daftar dirancang menggunakan pemeriksa transaksi Elle.
  • Setiap daftar diidentifikasi dengan kunci primer.
  • Transaksi dilakukan yang mencakup operasi baca dan tambah.
  • Datomic menyimpan atribut multi-nilai sebagai set tak berurutan.
  • Fungsi transaksi digunakan untuk merepresentasikan transaksi baca-tulis.

# 2.2 Penambahan daftar dengan CaS

  • Fungsi db/cas digunakan untuk mengontrol pembaruan serentak pada atribut.
  • Pola CaS digunakan untuk menjamin snapshot isolation.
  • Setiap daftar dienkode sebagai string bernilai tunggal yang dipisahkan koma.

# 2.3 Konsistensi internal

  • Operasi dirancang untuk mengukur konsistensi internal.
  • Mencakup transaksi yang mengubah nilai atribut beberapa kali, atau menambahkan dan menghapus fakta.
  • Melakukan operasi CaS beberapa kali.

# 2.4 Persetujuan

  • Sebuah mesin status dirancang untuk mensimulasikan persetujuan dan penolakan.
  • Fungsi persetujuan dan penolakan masing-masing memeriksa statusnya lalu membatalkan transaksi.

# 3 Hasil

  • Tidak ditemukan perilaku yang melanggar klaim keselamatan inti Datomic.
  • Transaksi tampak dieksekusi dalam urutan total.
  • Transaksi baca yang menggunakan (d/sync conn) konsisten dengan urutan waktu nyata.
  • Konsistensi internal sesuai dengan dokumentasi Datomic, tetapi berbeda dari perilaku basis data pada umumnya.

# 3.1 Konsistensi internal

  • Sebagian besar basis data menyediakan semantik eksekusi serial di dalam transaksi.
  • Datomic memperlakukan semua operasi dalam transaksi sebagai eksekusi serentak.
  • Fungsi transaksi hanya mengamati status basis data pada saat transaksi dimulai.
  • Jika terjadi konflik pada atribut berkardinalitas tunggal, transaksi dibatalkan.

# 3.2 Write skew virtual

  • Karena fungsi transaksi dijalankan secara serentak, fungsi yang benar secara individual dapat menghasilkan hasil yang salah saat dijalankan bersama.
  • Jika fungsi persetujuan dan penolakan dipanggil dalam transaksi yang sama, persetujuan dan penolakan dapat terjadi secara bersamaan.
  • Hal ini sesuai dengan dokumentasi Datomic, tetapi bisa mengejutkan bagi pengguna.

# 3.3 Predikat entitas

  • Predikat entitas dapat digunakan untuk menjamin invarian basis data.
  • Menyediakan berbagai kendala termasuk tipe, keunikan, dan predikat arbitrer.
  • Predikat entitas memeriksa seluruh status basis data untuk menentukan apakah transaksi akan diizinkan.
  • Invarian dijamin dengan menambahkan predikat entitas ke fungsi persetujuan dan penolakan.

Opini GN⁺

  • Datomic adalah basis data temporal yang sangat berguna untuk sistem pencatatan seperti layanan keuangan, karena memudahkan penelusuran status data di masa lalu.
  • Model eksekusi serentak dari fungsi transaksi meningkatkan performa, tetapi mungkin tidak familier bagi pengguna.
  • Melalui predikat entitas, kendala integritas data yang kompleks dapat diimplementasikan dengan mudah.
  • Karena digunakan oleh layanan keuangan berskala besar seperti NuBank, stabilitas dan skalabilitasnya telah terbukti.
  • Model transaksi unik Datomic menuntut cara berpikir yang berbeda dari basis data tradisional, sehingga mungkin memiliki kurva pembelajaran.

1 komentar

 
GN⁺ 2024-05-17
Komentar Hacker News

Ringkasan kumpulan komentar Hacker News

  • Diskusi menarik dan perbaikan dokumentasi

    • Diskusi selama prosesnya sangat menarik. Fakta bahwa Jepsen tidak menemukan bug fatal juga mengejutkan. Hasil yang berguna adalah dokumentasi dan perilaku abnormal yang memang dimaksudkan menjadi lebih jelas. Ini adalah latihan yang bermanfaat dan memberi kepercayaan diri dalam mengoperasikan bank yang menggunakan Datomic.
  • Memahami perilaku transaksi Datomic

    • Ini pertama kalinya membaca laporan Jepsen secara mendalam, dan saya menyukai penjelasan yang jelas tentang perilaku transaksi Datomic. Saya jadi sadar bahwa saya belum benar-benar memahami perbedaannya dengan database SQL. Struktur transaksi Datomic dan perubahan penamaan elemennya juga menonjol.
  • Nilai laporan Datomic

    • Laporannya sangat rinci dan merupakan analisis yang sangat baik terhadap database yang bagus. Menyenangkan juga melihat dokumentasinya menjadi lebih jelas dan diperbarui. Saya juga berpikir akan bagus jika Apple meminta analisis Jepsen untuk FoundationDB.
  • Asal-usul nama Jepsen

    • Nama Jepsen diambil dari penyanyi Carly Rae Jepsen. Menurut saya, itu nama yang sempurna untuk riset sistem terdistribusi.
  • Membantu menulis program Clojure

    • Seperti biasa, kerja yang luar biasa. Saya suka membacanya untuk belajar tentang sistem seperti ini dan mendapatkan potongan-potongan kecil informasi yang membantu dalam menulis program Clojure.
  • Membangun datastore mirip Datomic

    • Saya baru-baru ini sedang membangun datastore mirip Datomic, jadi laporan ini tampaknya akan berguna. Saya juga menikmati analisis MongoDB, dan merekomendasikan untuk melihat analisis Redis, RethinkDB, dan lainnya.
  • Model data Datomic

    • Model data Datomic terasa intuitif jika Anda familier dengan triple store/RDF. Namun, hal itu tidak sering disebutkan dalam dokumentasi atau diskusi online. Saya penasaran apakah karena orang-orang tidak terbiasa dengan konsep seperti ini, atau karena keterkaitannya dengan semantic web bisa menimbulkan kebingungan.
  • Klarifikasi dokumentasi Datomic

    • Jepsen memang memperjelas situasi pelanggaran invarians, tetapi pendekatan Datomic tampaknya berfokus pada memperjelas dokumentasi. Tim Datomic tampaknya menganggap pelanggaran semacam ini sebagai kesalahan pengguna.
  • Kelebihan desain single-thread

    • Keputusan desain untuk menangani operasi tulis dengan single-thread terbukti efektif. Datomic adalah hasil dari desain yang sangat baik, dan saya ingin menggunakannya lagi.
  • Karakteristik transaksi Datomic

    • Saya belum banyak menggunakan Datomic, tetapi tidak terlalu mengejutkan bahwa transaksinya pada dasarnya adalah pemrosesan batch. Karena berjalan dengan single-thread, kondisinya lebih sedikit mengalami race condition, dan secara desain memang lebih lambat tetapi aman.