हाइबरनेट में पहले और दूसरे स्तर के कैश क्या हैं?


245

क्या कोई सरल शब्दों में समझा सकता है कि हाइबरनेट में फर्स्ट और सेकंड लेवल कैशिंग क्या हैं?

जवाबों:


300

1.1) प्रथम-स्तरीय कैश

प्रथम-स्तरीय कैश हमेशा सत्र ऑब्जेक्ट के साथ संबद्ध होता है । हाइबरनेट डिफ़ॉल्ट रूप से इस कैश का उपयोग करता है। यहां, यह एक के बाद एक लेनदेन की प्रक्रिया करता है, इसका मतलब है कि एक लेनदेन को कई बार संसाधित करना नहीं है। मुख्य रूप से यह एसक्यूएल प्रश्नों की संख्या को कम करता है, जो किसी दिए गए लेनदेन के भीतर उत्पन्न करने की आवश्यकता होती है। यह लेन-देन में किए गए प्रत्येक संशोधन के बाद अद्यतन करने के बजाय, यह लेन-देन के अंत में ही लेनदेन को अद्यतन करता है।

1.2) दूसरे स्तर का कैश

सेकंड-लेवल कैश हमेशा सेशन फैक्ट्री ऑब्जेक्ट के साथ जुड़ता है । लेन-देन को चलाने के दौरान, इसके बीच में सेशन फ़ैक्टरी स्तर पर ऑब्जेक्ट्स को लोड किया जाता है, ताकि वे ऑब्जेक्ट पूरे एप्लिकेशन के लिए उपलब्ध हों, एकल उपयोगकर्ता के लिए बाध्य न हों। चूँकि ऑब्जेक्ट पहले से कैश में लोड होते हैं, जब भी कोई ऑब्जेक्ट क्वेरी द्वारा वापस किया जाता है, उस समय डेटाबेस लेनदेन के लिए जाने की कोई आवश्यकता नहीं होती है। इस तरह से दूसरे स्तर का कैश काम करता है। यहाँ हम क्वेरी स्तर कैश का उपयोग कर सकते हैं।

से उद्धृत: http://javabeat.net/introduction-to-hibernate-caching/


38
+1 सेशन ऑब्जेक्ट के साथ फर्स्ट लेवल कैश की मैपिंग और सेशन फैक्ट्री ऑब्जेक्ट के साथ दूसरे लेवल कैश की मैपिंग। मुझे पढ़ना जारी रखने की भी आवश्यकता नहीं है।
महेश

1
1-th स्तर कैश। ज्यादातर मामलों में इसकी जरूरत नहीं है, लेकिन इससे छुटकारा पाने का कोई विकल्प नहीं है। लेकिन आप यह सब समय के बारे में सोचना चाहिए ..
Ses

6
@ आपको अधिकांश मामलों में प्रथम स्तर के कैश की आवश्यकता होगी। अन्यथा आपके पास बहुत BAD PERFORMANCE समस्या होगी जैसे N + 1 क्वेरी, या कोई उत्सुक प्री-कैश कैश, या क्वेरी जब भी आप किसी विशेषता को एक्सेस करते हैं।
डेनिस सी

आमतौर पर हम बहुत कम समय के लिए सत्र का उपयोग करते हैं [और बहुत शरीर इसकी सिफारिश करता है] / अल्पकालिक सत्र: हम उस अवधि में उस कैश का उपयोग भी नहीं करते हैं। यदि सत्र लंबे समय तक रहता है तो हम सत्र से डेटा (उदाहरण के लिए संपादित रूप) को संलग्न करते हैं। ऐसा लगता है कि यह केवल एक परिदृश्य के लिए आवश्यक है जब हम कुछ जटिल अनुरोध-बाद-अनुरोधों का उपयोग करते हुए जीवित सत्र के लिए क्वेरी-सेशन-एपीआई का उपयोग करने की कोशिश कर रहे हैं।
Ses

1
@ डेनिसचुंग: लिंक मर चुका है। साथ कृपया अद्यतन javabeat.net/introduction-to-hibernate-caching
NEWUSER

118

स्ट्रीमलाइन लॉजिक ब्लॉग पर पहले स्तर के कैशिंग की बहुत अच्छी व्याख्या है ।

मूल रूप से, प्रथम स्तर की कैशिंग प्रति सत्र के आधार पर होती है, जहाँ दूसरे स्तर की कैचिंग को कई सत्रों में साझा किया जा सकता है।


20
यह वहीं सरल शब्द है, मुझे नहीं पता कि उनके पास इसे समझाने में इतना कठिन समय क्यों है
BlackTigerX

हे ... हाँ, मैं वास्तव में नहीं जानता कि मैं कैसे बहुत सरल हो सकता था :)
lomaxx

2
यह वास्तव में मेरे लिए अधिक स्पष्ट है। पहला प्रति सत्र है जहां दूसरा बहु सत्र के लिए है, मेरे लिए ध्यान में रखना सरल है। क्या हम दो बार वोट नहीं करेंगे? : D
काली इंद्रिय

1
वहाँ नमूना क्यों 1th स्तर कैश की जरूरत नहीं है। जैसा कि ज्यादातर मामलों में मेरे लिए है, इसकी बिल्कुल भी जरूरत नहीं है। लेकिन आपको इसके बारे में और सत्र के बारे में हर समय सोचना चाहिए।
Ses

इस जवाब के 11 साल बाद से और दुर्भाग्य से यह लिंक अब मौजूद नहीं है। लेकिन मुझे इसकी सामग्री इसके आर्काइव वेबपेज: web.archive.org/web/20081207044228/http://…
गोलू

105

यहाँ हाइबरनेट कैश की कुछ बुनियादी व्याख्या ...

प्रथम स्तर का कैश "सत्र" ऑब्जेक्ट के साथ जुड़ा हुआ है। कैश ऑब्जेक्ट्स का दायरा सत्र का है। एक बार सत्र बंद हो जाने पर, कैश्ड वस्तुएं हमेशा के लिए चली जाती हैं। प्रथम स्तर कैश डिफ़ॉल्ट रूप से सक्षम है और आप इसे अक्षम नहीं कर सकते। जब हम किसी इकाई को पहली बार क्वेरी करते हैं, तो इसे डेटाबेस से पुनर्प्राप्त किया जाता है और हाइबरनेट सत्र से जुड़े पहले स्तर के कैश में संग्रहीत किया जाता है। यदि हम समान सत्र वस्तु के साथ उसी ऑब्जेक्ट को फिर से क्वेरी करते हैं, तो इसे कैश से लोड किया जाएगा और कोई sql क्वेरी निष्पादित नहीं की जाएगी। भरी हुई इकाई को evict()विधि का उपयोग करके सत्र से हटाया जा सकता है । यदि इस evict()विधि का उपयोग करके इसे हटा दिया गया है, तो इस इकाई का अगला लोडिंग फिर से एक डेटाबेस कॉल करेगा । पूरे सत्र कैश को clear()विधि का उपयोग करके हटाया जा सकता है । यह कैश में संग्रहीत सभी संस्थाओं को हटा देगा।

दूसरा स्तर कैश प्रथम स्तर के कैश के अलावा है जो सत्र कारखाना क्षेत्र में वैश्विक स्तर पर उपयोग करने के लिए उपलब्ध है। सेकंड लेवल कैश को सेशन फैक्ट्री स्कोप में बनाया गया है और यह सभी सेशन में इस्तेमाल होने के लिए उपलब्ध है जो उस सेशन फैक्ट्री का उपयोग करके बनाए गए हैं। इसका अर्थ यह भी है कि एक बार सत्र कारखाना बंद हो जाने पर, इससे जुड़े सभी कैश मर जाते हैं और कैश मैनेजर भी बंद हो जाता है। जब भी हाइबरनेट सत्र एक इकाई को लोड करने का प्रयास करता है, तो पहले स्तर कैश में इकाई की कैश्ड प्रति (विशेष हाइबरनेट सत्र के साथ संबद्ध) के लिए यह बहुत पहले स्थान पर दिखता है। यदि इकाई की कैश्ड प्रति पहले स्तर के कैश में मौजूद है, तो इसे लोड विधि के परिणाम के रूप में लौटाया जाता है। यदि पहले स्तर के कैश में कैश की गई इकाई नहीं है, तो कैशेड इकाई के लिए दूसरे स्तर के कैश को देखा जाता है। यदि दूसरे स्तर के कैश में कैश्ड इकाई है, तो इसे लोड विधि के परिणाम के रूप में लौटाया जाता है। परंतु, इकाई को वापस करने से पहले, इसे पहले स्तर के कैश में भी संग्रहीत किया जाता है ताकि इकाई के लिए लोड करने की विधि के लिए अगला आह्वान इकाई को पहले स्तर के कैश से वापस कर देगा, और फिर से दूसरे स्तर के कैश में जाने की आवश्यकता नहीं होगी। यदि इकाई पहले स्तर के कैश और दूसरे स्तर के कैश में भी नहीं मिलती है, तो डेटाबेस क्वेरी निष्पादित की जाती है और प्रतिक्रिया के रूप में लौटने से पहले दोनों कैश स्तरों में इकाई को संग्रहीत किया जाता है।load() तरीका।


2
बहुत बढ़िया स्पष्टीकरण! यदि आप कुछ अनुक्रम आरेख खींच सकते हैं तो यह भयानक होगा !!!
एडेलिन

पूरी तरह से और अच्छी व्याख्या
मनीष

1
यदि आप जो कुछ भी पहले से जानते हैं उसे संशोधित करना चाह रहे हैं, तो डेनिस सी और आईओमैक्स द्वारा उपरोक्त दो उत्तर महान, बहुत रसीले और याद रखने में आसान हैं। यदि हां, तो आप अंतर का स्पष्टीकरण खोज रहे हैं जब आप पहले से ही नहीं जानते हैं, तो यह उत्तर बहुत बेहतर है!
स्टूडेंट सोल

महान व्याख्या !!
19

17

यह एक बहुत ही सामान्य प्रश्न है, इसलिए यह उत्तर मेरे ब्लॉग पर लिखे गए इस लेख पर आधारित है ।

प्रथम-स्तरीय कैश

हाइबरनेट अंतिम संभव क्षण तक दृढ़ता फ्लशिंग को स्थगित करने की कोशिश करता है। जैसा कि मैंने इस लेख में बताया है , इस रणनीति को पारंपरिक रूप से ट्रांसेक्शनल राइट-बैक के रूप में जाना जाता है।

राइट-बैक किसी भी तार्किक या भौतिक लेनदेन के बजाय हाइबरनेट फ्लशिंग से संबंधित है। लेन-देन के दौरान, फ़्लश कई बार हो सकता है।

यहां छवि विवरण दर्ज करें

फ्लश किए गए परिवर्तन केवल वर्तमान डेटाबेस लेनदेन के लिए दिखाई देते हैं। जब तक वर्तमान लेनदेन नहीं किया जाता है, तब तक कोई परिवर्तन अन्य समवर्ती लेनदेन द्वारा दिखाई नहीं देता है।

प्रथम-स्तरीय कैश के कारण, हाइबरनेट कई अनुकूलन कर सकता है:

दूसरे स्तर का कैश

एक उचित कैशिंग समाधान को कई हाइबरनेट सत्रों में फैलाना होगा और यही कारण है कि हाइबरनेट अतिरिक्त द्वितीय-स्तरीय कैश का भी समर्थन करता है।

दूसरे स्तर का कैश सेशनफैक्टरी जीवन-चक्र के लिए बाध्य है, इसलिए इसे केवल SessionFactoryबंद होने पर नष्ट कर दिया जाता है (आमतौर पर जब एप्लिकेशन बंद हो रहा होता है)। दूसरे स्तर का कैश मुख्य रूप से इकाई आधारित है, हालांकि यह वैकल्पिक क्वेरी-कैशिंग समाधान का भी समर्थन करता है।

अधिक जानकारी के लिए, इस लेख को देखें


3

डिफ़ॉल्ट रूप से, NHibernate प्रथम स्तर की कैशिंग का उपयोग करता है जो सत्र वस्तु आधारित है। लेकिन अगर आप एक बहु-सर्वर वातावरण में चल रहे हैं, तो पहले स्तर का कैश कुछ प्रदर्शन मुद्दों के साथ बहुत स्केलेबल नहीं हो सकता है। यह इस तथ्य के कारण होता है कि इसे डेटाबेस में बहुत बार यात्राएं करनी पड़ती हैं क्योंकि डेटा कई सर्वरों पर वितरित किया जाता है। दूसरे शब्दों में, NHibernate बॉक्स से बाहर एक बुनियादी, गैर-परिष्कृत-इन-प्रोसेस L1 कैश प्रदान करता है। हालाँकि, यह ऐसी सुविधाएँ प्रदान नहीं करता है कि एक कैशिंग समाधान का अनुप्रयोग प्रदर्शन पर एक उल्लेखनीय प्रभाव होना चाहिए।

इसलिए इन सभी समस्याओं का प्रश्न L2 कैश का उपयोग है जो सत्र फैक्ट्री ऑब्जेक्ट्स के साथ जुड़ा हुआ है। यह डेटाबेस में समय लेने वाली यात्राओं को कम कर देता है इसलिए अंततः ऐप प्रतिक्रिया समय बढ़ाता है।


1

पहले स्तर का कैश

सत्र वस्तु पहले स्तर के कैश डेटा को रखती है। इसे बाई दिफ़ौल्ट मर्थकृत किया गया है। प्रथम स्तर का कैश डेटा पूरे आवेदन के लिए उपलब्ध नहीं होगा। एक आवेदन कई सत्र वस्तु का उपयोग कर सकता है।

दूसरा स्तर कैश

SessionFactory वस्तु दूसरे स्तर के कैश डेटा को रखती है। दूसरे स्तर के कैश में संग्रहीत डेटा पूरे एप्लिकेशन के लिए उपलब्ध होगा। लेकिन हमें इसे स्पष्ट रूप से सक्षम करने की आवश्यकता है।


-4

एक दूसरे स्तर के कैश में, डोमेन hbm फाइलें महत्वपूर्ण परिवर्तनशील और मूल्य झूठी हो सकती हैं। उदाहरण के लिए, इस डोमेन वर्ग में एक दिन में कुछ अवधि सार्वभौमिक सत्य के रूप में स्थिर रहती है। तो, यह आवेदन भर में अपरिवर्तनीय के रूप में चिह्नित किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.