önbelleğe alma ayarı
Hibernate.cfg.xml dosyasındaki önbellek ayarlarımıza geri dönelim:
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletEhCacheProvider"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
İlk satıra dikkat edin - önbelleğe alma motoru sınıfının adını içerir. Hazırda Bekletme aslında önbelleğe almayı dahili olarak uygulamaz, bunun yerine kendi önbelleğe alma motorunuzu uygulayabileceğiniz bir dizi arabirim sağlar.
Popüler uygulamalar şunları içerir:
- EHCache
- OSCache
- Sürü Önbelleği
- JBoss TreeCache
EHCache
Bellekte veya diskte ve ayrıca küme önbelleğinde önbelleğe alınabilir ve ayrıca isteğe bağlı bir Hazırda bekletme sorgu sonuçları önbelleğini destekler.
OSCache
Zengin bir süre sonu ilkeleri seti ve sorgu önbelleği desteği ile aynı JVM'de bellek ve disk önbelleğe almayı destekler.
Sürü Önbelleği
JGroups tabanlı küme önbelleği. Kümelenmiş geçersiz kılma kullanır ancak Hazırda Beklet sorgu önbelleğini desteklemez.
JBoss Önbelleği
Yine JGroups çok noktaya yayın kitaplığını temel alan, tamamen işlemsel olarak çoğaltılmış bir kümelenmiş önbellek. Çoğaltmayı veya geçersiz kılmayı, eşzamanlı veya eşzamansız iletişimi ve iyimser ve kötümser kilitlemeyi destekler. Hazırda bekletme sorgu önbelleği desteklenir.
Bu motorlar tüm paralel erişim stratejilerini desteklemez. Gerçek durum aşağıdaki tabloda açıklanmıştır:
Strateji/Sağlayıcı | Sadece oku | katı olmayan okuma yazma | okuma yazma | işlemsel |
---|---|---|---|---|
EHCache | X | X | X | |
OSCache | X | X | X | |
Sürü Önbelleği | X | X | ||
JBoss Önbelleği | X | X |
EHCache yapılandırma örneği
EHCache motorunun ehcache.xml adlı kendi yapılandırma dosyası vardır. Böyle bir dosyanın yaklaşık içeriği:
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory = "1000"
eternal = "false"
timeToIdleSeconds = "120"
timeToLiveSeconds = "120"
overflowToDisk = "true"
/>
<cache name = "Employee"
maxElementsInMemory = "500"
eternal = "true"
timeToIdleSeconds = "0"
timeToLiveSeconds = "0"
overflowToDisk = "false"
/>
Burada önbelleğe alma ayarlarını hem genel olarak hem de her varlık için ayrı ayrı yapılandırabilirsiniz. Resmi belgelerde daha fazlasını okuyun .
Önbelleğe alma istatistiklerinin analizi
Önbelleğe alma mekanizmasının ne kadar iyi yapılandırıldığını da kontrol etmeniz gerekebilir. Hibernate, özellikle bunun için özel bir İstatistik nesnesi sağlar.
Örnek:
Statistics statistics = session.getSessionFactory().getStatistics();
CacheRegionStatistics cacheStatistics = statistics.getDomainRegionStatistics(“com.codegym.employee”);
long hitCount = cacheStatistics.getHitCount();
long missCount = cacheStatistics.getMissCount();
double hitRatio = (double) hitCount / (hitCount + missCount);
Bu konuda ayrıntıya girmeyeceğiz çünkü standart önbelleğe alma çözümlerinizin bitmesi ve bunları manuel olarak iyileştirmeniz gerekmesi daha uzun yıllar alacak. Bu arada, bu yorum benzer bir davadan alınmış olabilir:
// Dear programmer:
// When you're done "optimizing" this routine
// and realize how big of a mistake it was to do this,
// please increment the counter at the bottom as a warning
// for the next guy:
// number_of_hours_spent_here = 42
GO TO FULL VERSION