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.
object-oriented
Jeffrey Hantin
sumber
sumber
Jawaban:
Saya pikir beberapa masalah adalah mereka memiliki kasus penggunaan yang SANGAT spesifik (alasan Anda tidak cocok). Saya telah membangun dan bekerja pada sistem yang menggunakan pendekatan ini dan ketika Anda memiliki masalah yang sebenarnya masalah ini bisa menjadi solusi yang bagus.
Bagian lain adalah bahwa itu tampak jauh seperti beberapa bit yang lebih menyakitkan dari penyimpanan data khusus yang Anda gunakan untuk menemukan lebih dari 10 tahun yang lalu dan memiliki beberapa jebakan yang sama (misalnya batch diperbarui btreive misalnya) yang membawa Anda Poin "terlalu adat", tetapi juga membuatnya sulit untuk menemukan bagian rak yang bekerja dengan sopan dengannya.
Bagian terakhir adalah mereka bisa sangat sulit untuk ditanyakan dalam banyak kasus dan orang-orang pada umumnya cukup terbiasa untuk mendapatkan jawaban mereka sekarang.
sumber
Saya pikir Anda harus terlebih dahulu menunjukkan bahwa begitu banyak pengembang benar-benar membenci mereka. Saya pikir bukan itu masalahnya. Pertimbangkan unggas itu, beberapa waktu lalu, memformalkan pola semacam ini di sini .
sumber
Jawaban atas pertanyaannya adalah bahwa walaupun teorinya sederhana, praktiknya tidak.
Hanya menguji pengaturan semacam itu membutuhkan puluhan kasus uji, tambahkan proses mutli atau kode multi-ulir dan ini melompat ke ratusan kondisi yang mungkin perlu diuji, baik untuk kegigihan dan pemulihan.
Monitor transaksi apa pun seperti CICS, Tuxedo, Weblogic, Websphere, JBOSS atau .NET, akan menyediakan semua fasilitas ini secara bersih dan teruji. Dan setiap basis data akan memberikan "cukup" transaksional / kegigihan untuk sebagian besar aplikasi.
Sebagian besar kasus roda itu diciptakan dan disempurnakan sejak lama.
sumber
Prasyarat terdengar agak sulit untuk dikodekan, terutama dengan sebagian besar sistem yang tidak memerlukan kepatuhan ACID saat berjalan di memori. Overhead terdengar agak buruk juga - ada banyak pelacakan negara yang terlibat di sana.
sumber