Prevalans, ikili serileştirme ve önceden yazma günlüğüne dayanan bir bellek içi nesne modeline ACID özellikleri sağlamak için basit bir tekniktir. Şöyle çalışır:
- Anlık görüntü ile başlayın. Nesne modelini seri hale getirin ve bir dosyaya yazın.
- Günlük dosyası oluşturun. Nesne modeline yapılan her çağrı için çağrıyı ve argümanlarını serileştirin.
- Dergi çok büyüdüğünde, kapatıyorsunuz veya başka bir şekilde uygunsa, bir kontrol noktası gerçekleştirin: yeni bir anlık görüntü yazın ve günlüğü kesin.
- Bir çarpışmadan veya elektrik çarpmasından geri almak veya kurtarmak için, son anlık görüntüyü yükleyin ve günlüğe kaydedilen tüm aramaları yeniden yürütün.
Bu işi yapmak için gerekli önlemler şunlardır:
- Değişken nesne referanslarının kaçmasına veya yaygınlık katmanına girmesine izin vermeyin. RPC yapıyormuşsunuz gibi bir çeşit proxy veya OID şemasına ihtiyacınız var. (Bu yaygın bir acemi hatasıdır, ' vaftiz sorunu ' olarak adlandırılmıştır .)
- Bir çağrıdan erişilebilen tüm mantık tamamen belirleyici olmalı ve iş mantığı açısından anlamlı I / O veya OS çağrıları yapmamalıdır. Tanılama günlüğüne yazmak büyük olasılıkla sorun değil, ancak sistem saatini almak veya eşzamansız bir temsilci başlatmak genellikle uygun değildir. Böylece günlük, farklı bir makinede veya farklı bir zamanda geri yüklense bile aynı şekilde yeniden oynatılır. (Çoğu yaygınlık kodu, işlem zaman damgasını almak için alternatif bir zaman araması sağlar.)
- Yazar eşzamanlılığı, dergi yorumlamasında belirsizlik getirir, bu nedenle yasaktır.
Çünkü ...
- insanlar çok uygun olmayan bir proje üzerinde birini kullanmak denedikten sonra onlar için kötü bir tat geliştirdi * kendisine?
- Klaus Wuestefeld'in sert savunucusu insanları kapattı mı?
- zorunlu programlama modelini sevenler G / Ç'yi hesaplamadan ayırmaktan hoşlanmaz , bunun yerine G / Ç ve iş parçacığı aramaları ile hesaplamayı harmanlamayı mı tercih ederler?
- yaygınlık katmanları kavramsal olarak o kadar basittir ve içinde yaşadıkları çerçevenin özelliklerine o kadar yakındırlar ki, genellikle proje için özel olarak yuvarlanırlar, bu da onları çok yabancı / standart dışı / riskli yapar mı?
- Yapmamaya dikkat etmen gereken şeyi düz tutmak çok zor mu?
- Yeni başlayanların kafaları, okulda yazmayı öğrendikleri aynı iki katmanlı veritabanı tabanlı uygulama olmayan bir şeyle karşılaştıklarında patlıyor gibi görünüyor mu? ;)
* RAM içinde tüm veri seti uyuyor , sen yazar eşzamanlılık gerekmez ve bir veri deposuna geçici sorgular, raporlama veya ihracat yapmaya gerek yoktur. SQLite'den özür dilerken, prevalans, Oracle'ın yerine değil, kayıt dosyalarındaki bir gelişmedir.