कॅशिंग सेट करत आहे

चला hibernate.cfg.xml फाईलमधील आमच्या कॅशिंग सेटिंग्जवर परत जाऊया:

<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"/>

पहिल्या ओळीकडे लक्ष द्या - त्यात कॅशिंग इंजिन वर्गाचे नाव आहे. हायबरनेट प्रत्यक्षात अंतर्गत कॅशिंग लागू करत नाही, त्याऐवजी ते इंटरफेसचा एक संच प्रदान करते ज्याद्वारे तुम्ही तुमचे स्वतःचे कॅशिंग इंजिन लागू करू शकता.

लोकप्रिय अंमलबजावणीमध्ये हे समाविष्ट आहे:

  • EHCache
  • OSCache
  • स्वार्मकचे
  • JBoss TreeCache

EHCache

हे मेमरीमध्ये किंवा डिस्कवर तसेच क्लस्टर कॅशिंगमध्ये कॅशे केले जाऊ शकते आणि हायबरनेट क्वेरी परिणामांच्या वैकल्पिक कॅशेला देखील समर्थन देते.

OSCache

एकाच JVM मध्ये मेमरी आणि डिस्क कॅशिंगला सपोर्ट करते एक्सपायरी पॉलिसी आणि क्वेरी कॅशे सपोर्टच्या समृद्ध संचासह.

स्वार्मकचे

JGroups वर आधारित क्लस्टर कॅशे. हे क्लस्टर केलेले अवैधीकरण वापरते परंतु हायबरनेट क्वेरी कॅशेला समर्थन देत नाही.

जेबॉस कॅशे

JGroups मल्टिकास्ट लायब्ररीवर आधारित पूर्णतः व्यवहारात्मक प्रतिकृती क्लस्टर केलेले कॅशे. हे प्रतिकृती किंवा अवैधीकरण, समकालिक किंवा असिंक्रोनस संप्रेषण आणि आशावादी आणि निराशावादी लॉकिंगला समर्थन देते. हायबरनेट क्वेरी कॅशे समर्थित आहे.

ही इंजिने सर्व समांतर प्रवेश धोरणांना समर्थन देत नाहीत. वास्तविक परिस्थिती खालील तक्त्यामध्ये वर्णन केली आहे:

धोरण/प्रदाता फक्त वाचा नॉन-कठोर वाचन-लेखन वाचा लिहा व्यवहार
EHCache एक्स एक्स एक्स
OSCache एक्स एक्स एक्स
स्वार्मकचे एक्स एक्स
जेबॉस कॅशे एक्स एक्स

EHCache कॉन्फिगरेशन उदाहरण

EHCache इंजिनची स्वतःची कॉन्फिगरेशन फाइल आहे ज्याला ehcache.xml म्हणतात. अशा फाइलची अंदाजे सामग्री:

<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"
/>

येथे तुम्ही सर्वसाधारणपणे आणि प्रत्येक घटकासाठी स्वतंत्रपणे कॅशिंग सेटिंग्ज कॉन्फिगर करू शकता. अधिकृत कागदपत्रांमध्ये अधिक वाचा .

कॅशिंग आकडेवारीचे विश्लेषण

तुम्हाला कॅशिंग यंत्रणा किती व्यवस्थित कॉन्फिगर केली आहे हे देखील तपासावे लागेल. हायबरनेट विशेषत: यासाठी एक विशेष सांख्यिकी ऑब्जेक्ट प्रदान करते.

उदाहरण:

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);

आम्ही याबद्दल तपशिलात जाणार नाही, कारण तुमच्याकडे मानक कॅशिंग सोल्यूशन्स संपायला अजून बरीच वर्षे लागतील आणि त्यांना व्यक्तिचलितपणे सुधारण्याची गरज आहे. तसे, ही टिप्पणी कदाचित अशाच प्रकरणातून काढली गेली असावी:

// 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