Prevalensi adalah teknik sederhana untuk menyediakan properti ACID ke model objek dalam-memori berdasarkan serialisasi biner dan pencatatan write-ahead. Ini berfungsi seperti ini:
- Mulai dengan snapshot. Serialize model objek dan tulis ke file.
- Buat file jurnal. Untuk setiap panggilan ke dalam model objek, serialkan panggilan dan argumennya.
- Ketika jurnal menjadi terlalu besar, Anda mematikan, atau jika tidak nyaman, melakukan pos pemeriksaan: menulis snapshot baru dan memotong jurnal.
- Untuk memutar kembali atau memulihkan dari gangguan daya, tekan snapshot terakhir dan jalankan kembali semua panggilan yang dicatat dalam jurnal.
Tindakan pencegahan yang diperlukan untuk membuat pekerjaan ini adalah:
- Jangan biarkan referensi objek yang dapat berubah keluar atau masuk ke lapisan prevalensi. Anda memerlukan semacam proxy atau skema OID, seolah-olah Anda sedang melakukan RPC. (Ini adalah kesalahan pemula yang biasa dijuluki ' masalah baptisan '.)
- Semua logika yang dapat dijangkau dari panggilan harus sepenuhnya deterministik, dan tidak boleh melakukan panggilan I / O atau OS yang bermakna logika bisnis. Menulis ke log diagnostik mungkin OK, tetapi mendapatkan waktu sistem atau meluncurkan delegasi asinkron umumnya tidak. Ini dimaksudkan agar jurnal diputar ulang secara identik meskipun dikembalikan pada mesin yang berbeda atau pada waktu yang berbeda. (Sebagian besar kode prevalensi menyediakan panggilan waktu alternatif untuk mendapatkan cap waktu transaksi.)
- Concurrency penulis memperkenalkan ambiguitas dalam interpretasi jurnal, sehingga dilarang.
Apakah karena ...
- orang mengembangkan rasa tidak enak bagi mereka setelah mencoba untuk menggunakan satu pada sebuah proyek yang tidak cocok * untuk itu?
- Advokasi keras Klaus Wuestefeld mematikan orang ?
- orang yang menyukai model pemrograman imperatif tidak suka memisahkan I / O dari perhitungan , lebih suka interleave perhitungan dengan I / O dan panggilan threading?
- lapisan prevalensi sangat sederhana secara konseptual dan sangat erat terikat dengan karakteristik kerangka kerja yang mereka huni sehingga biasanya digulung untuk proyek, yang membuatnya terlalu asing / tidak standar / berisiko?
- terlalu sulit untuk tetap lurus apa yang harus Anda berhati-hati untuk tidak lakukan?
- kepala pemula sepertinya meledak ketika dihadapkan dengan sesuatu yang tidak sama dengan aplikasi berbasis dua tingkat yang mereka pelajari di sekolah? ;)
* The seluruh data yang ditetapkan cocok dalam RAM , Anda tidak perlu penulis concurrency, dan Anda tidak perlu melakukan ad-hoc query, pelaporan, atau ekspor ke data warehouse. Dengan permintaan maaf kepada SQLite, prevalensi adalah peningkatan pada file penyimpanan, bukan pengganti untuk Oracle.