2008-09-20 13 views
13

Bu soru, NHibernate'in ikinci düzey önbelleği için ReadWrite ve NonStrictReadWrite önbellek eşzamanlılık stratejileri arasındaki farkla ilgilidir. Anladığım kadarıyla bir dağıtılmış çoğaltılmış olduğundaStrict/NonStrict NHibernate önbellek eşzamanlılık stratejileri

, bu iki strateji arasındaki fark alakalı önbellek - bir önbellek başka önbellek olarak tam olarak aynı değere sahip olduğunu nonstrict ederken sıkı okuma/yazma gerektiği, garanti değil - Önbellek sağlayıcının uygun dağıtılmış kilitleme yaptığı varsayılarak.

Anlamadığım bölüm tek önbelleğe sahip olduğunda alakalı veya dağıtılmış (non çoğaltılmış) önbellek bölümlenmiş nasıl sıkı nonstrict ayrım vs olduğunu. İlgili olabilir mi? Çoğaltılmamış senaryolarda, zaman damgalarının önbelleğinin, eski sonuçların sunulmadığından emin olacağına benziyor. Eğer ilgili olabiliyorsa, bir örnek görmek istiyorum.

cevap

18

Tek bir hedef/iş ortamında doğru olduğunu düşündüğünüz şey çok az fark var. Bununla birlikte, önbellek sağlayıcılarına bakarsanız, çok iş parçacıklı bir senaryoda bile devam ediyor.

Bir nesnenin değiştirilmiş durumdan yeniden önbelleğe alınması, katı olmayan kısımda farklıdır. Örneğin, nesneniz yeniden yüklenmek için çok daha ağırsa ancak faturadaki bir sonraki kullanıcıya dayanmak yerine bir güncellemeden sonra onu beğenirseniz, katı ve katı olmayan farklı performanslar görürsünüz. Örneğin: bir güncelleme gerçekleştirildikten sonra katı olmayan bir nesne önbelleğe basitçe dökülür ... fiyat güncelleme sonrası işleyicisi yerine sonraki erişimde getiri için ücret ödenir. Sıkı modelde, yeniden önbellek otomatik olarak halledilir. Benzer bir şey ekler ile olur, katı olmayan bir şey arkasından gidecek ve yeni eklenen nesneyi önbelleğe yükleyecektir.

Sıkı olarak okunmayan bir okuma olasılığınız var, çünkü önbellek okunmadığında kilitlenmediğinden, başka bir iş parçacığının öğenin değiştirilmesinin sonucunu göremezsiniz. Kesin olarak, bu öğenin önbellek anahtarı kilitlenecekti ve siz de bekletildiniz, ancak mutlak en son sonucu göreceksiniz.

Dolayısıyla, tek bir hedef ortamda bile, nesneler üzerinde büyük miktarda eşzamanlı okuma/düzenleme varsa, gerçekten doğru olmayan verileri görme şansınız olur.

Bu, kaydetme gerçekleştirildiğinde ve düzenleme ekranı yüklendiğinde elbette bir sorun haline gelir: nesnenin en son sürümünü düzenlediklerini düşünen kişi gerçekten değildir ve ne zaman kötü bir sürprizle karşılaşırlar? Düzenlemeleri, yükledikleri eski verilere kaydetmeye çalışırlar.

+0

Teşekkürler Nick, bu çok yardımcı oldu. Yanlışlıkla, zaman damgası önbelleğinin kirli okumaları engelleyeceğini farz ettim, ancak önbelleği kilitlemeden bunun mümkün olmadığını görebiliyorum (bu, hangi bir sınırlama olmayacaktır). –

+0

Çok bilgilendirici, teşekkürler. – ctrlplusb

2

Farklılıkları açıklayan bir gönderi oluşturduğum here. Lütfen bir göz atın ve yorum yapmaktan çekinmeyin.