Hazırda Bekletme İpucu: Hazırda Beklet’in sorgu önbelleğiyle gereksiz sorgulardan kaçının

Portakalkafa

Global Mod
Global Mod


  1. Hazırda Bekletme İpucu: Hazırda Beklet’in sorgu önbelleğiyle gereksiz sorgulardan kaçının

Hazırda Bekletme İpuçları serisi, yaygın Hazırda Bekletme sorularına hızlı ve kolay çözümler sunar. Bu kez, sorgu sonuçlarını depolamak için sorgu önbelleğini kullanmakla ilgili.


Rica etmek:


Hazırda bekletme, sorgular için birinci ve ikinci düzey önbelleği kullanmaz. Ayrıca, sorgu sonuçlarını bir önbellekte saklamanın bir yolu var mı?

Çözüm:


Hibernate, JPA standardında tanımlanan iki önbelleğe ek olarak, sorgu sonuçlarını depolayabileceğiniz Sorgu Önbelleği sunar. Varsayılan yapılandırmada devre dışıdır ve etkinleştirilebilir. kalıcılık.xmletkinleştirmek için dosya. Bunu yapmak için parametre hibernate.cache.use_query_cache true olarak ayarlayın ve hibernate.cache.region.factory_classsınıf yapılandırılabilir.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="my-persistence-unit">
...
<properties>
...

<!-- configure caching -->
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
</properties>
</persistence-unit>
</persistence>


Ayrıca, ilgili sorgu için sorgu önbelleği açık olmalıdır. Unutulmamalıdır ki bir sorgunun sonucu, SQL sorgusunun kendisine ve kullanılan parametre değerlerine bağlıdır. Bu nedenle, sorgu önbelleğinde saklanan bir sorgu sonucu, yalnızca önceki sorgu aynı parametre değerleriyle yürütüldüyse kullanılabilir.

Session s = (Session) em.getDelegate();
Query q = s.createQuery("SELECT a FROM Author a WHERE id = :id");
q.setParameter("id", 1L);
q.setCacheable(true);
log.info(q.uniqueResult());


Önbelleğe alma hakkında daha fazla bilgi edinin


Hibernate, farklı uygulama senaryolarında önemli performans iyileştirmelerine yol açabilen 3 önbellek sunar. Ancak, bu avantajlar ücretsiz değildir. Bir önbelleği korumak ek yük oluşturur ve hatta uygulamanızı yavaşlatabilir. “Hibernate Performance Tuning Online Eğitimim”de Hibernate Cache ve ideal uygulama senaryoları hakkında daha fazla bilgi var.

Hazırda Bekletme İpuçları: Kitap


“Hibernate Tips: 70+ Solutions to Common Hibernate Problems” adlı kitabım, basit ve karmaşık eşleme tanımları, günlüğe kaydetme, Java 8 desteği, önbelleğe alma ve statik sorgular ve dinamikler oluşturma gibi konularda 70’den fazla tarif içeriyor. Amazon’da basılı ve e-kitap biçiminde ve hibernate-tips.com adresinde PDF biçiminde mevcuttur.


()



Haberin Sonu
 
Üst