डेटा लेयर पर व्यापार परत पर कैशिंग बनाम कैशिंग


36

मैंने हमेशा उन प्रोजेक्ट्स पर काम किया है जहां कैशिंग डीएएल पर किया गया था, मूल रूप से बस जब आप डेटाबेस को कॉल करने वाले होते हैं, तो यह जांचता है कि क्या डेटा पहले से ही कैश में है और यदि यह है, तो यह सिर्फ कॉल नहीं करता है इसके बजाय उस डेटा को वापस करता है।

मैं अभी हाल ही में व्यावसायिक परत पर कैशिंग के बारे में पढ़ता हूं, इसलिए मूल रूप से संपूर्ण व्यापारिक वस्तुओं को कैशिंग करता हूं। एक फायदा जो मैं सीधे देख सकता हूं वह है बेहतर प्रतिक्रिया समय।

आप कब एक को पसंद करेंगे? और बिजनेस लेयर पर कैचिंग एक आम बात है?


क्या आपके एप्लिकेशन का प्रदर्शन इतना महत्वपूर्ण है कि रिपॉजिटरी या डीएएल-लेयर को अतिरिक्त कॉल की स्पष्टता से बचने के लिए व्यावसायिक परत में कैशिंग करना बेहतर है?
JDT

1
नहीं, नहीं और उत्तरों को पढ़ने के बाद, मुझे लगता है कि मैं सिर्फ डीएएल में कैशिंग से चिपकूंगा। चीयर्स।
एम्मा

आपको अपने बिजनेस लेयर के ऊपर कैशिंग पर विचार करना चाहिए, और स्केलिंग के बारे में भी सोचना चाहिए।
AK_

जवाबों:


30

यह निश्चित उत्तर के लिए बहुत व्यापक है। व्यक्तिगत रूप से, मुझे लगता है कि कैशिंग के लिए एक डेटा एक्सेस लेयर बेहतर जगह है, केवल इसलिए कि यह बहुत सरल माना जाता है - रिकॉर्ड अंदर और बाहर जाते हैं और यह बात है।

एक व्यावसायिक परत उच्चतर जटिलता के कई अतिरिक्त नियमों को लागू करती है, इसलिए यह बेहतर है यदि इसमें एक ही वर्ग (या एक ही विधि) में एकाधिक-वस्तु स्थिरता चिंताओं के अलावा प्रति-वस्तु उपलब्धता चिंताओं का प्रबंधन भी नहीं करना है - एसआरपी का घोर उल्लंघन हो।

(बेशक, मैं केवल उस अंतर्दृष्टि तक पहुंच गया था जब मेरी सेवा कक्षाएं असहनीय जटिलता में बढ़ गई थीं, जब उन्होंने कैशिंग और कॉन्फ़िगरेशन दोनों को एक साथ करने की कोशिश की थी। अनुभव से बेहतर शिक्षक नहीं है, लेकिन कीमत सुनिश्चित करना कठिन है।)


कैशिंग को जटिल होने की आवश्यकता क्यों है? यह एओपी और एनोटेशन के एक जोड़े के साथ किया जा सकता है। क्या यह अभी भी एसआरपी का उल्लंघन है? ऐसा क्यों नहीं है जब डीएएल में किया जाता है? IMHE मैंने सर्विस क्लास "कॉम्प्लेक्स" को कभी कैश नहीं किया; इसकी जटिलता से स्वतंत्र, एक सेवा को ब्लैक बॉक्स के रूप में देखा जा सकता है और इसके परिणाम को कैश किया जा सकता है
user1075613

25

कैशिंग के लिए डेटा की पहुंच और दृढ़ता / भंडारण परतें प्राकृतिक रूप से प्राकृतिक स्थान हैं। वे I / Os कर रहे हैं, उन्हें आसान, कैशिंग सम्मिलित करने के लिए आसान जगह बना रहा है। मैं हिम्मत करता हूं कि लगभग हर DAL या दृढ़ता की परत, जैसा कि परिपक्व होती है, एक कैशिंग फ़ंक्शन दिया जाता है - अगर यह बहुत शुरुआत से उस तरह से डिज़ाइन नहीं किया गया है।

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

DAL / दृढ़ता परत जोखिम में कैशिंग "कोल्ड" कर संदर्भ डेटा वहाँ बैठे हैं, व्यर्थ में 12.2MB कैश पर कब्जा कर रहे हैं और कुछ खाते की जानकारी को विस्थापित कर रहे हैं, वास्तव में, केवल एक मिनट में गहन रूप से उपयोग किया जाएगा। यहां तक ​​कि सबसे अच्छा कैश प्रबंधक उच्च स्तर के डेटा संरचनाओं और कनेक्शनों के बारे में कम जानकारी के साथ काम कर रहे हैं, और बहुत कम अंतर्दृष्टि के साथ कि ऑपरेशन जल्द ही आ रहे हैं, इसलिए वे guesstimation एल्गोरिदम पर वापस आते हैं ।

इसके विपरीत, एप्लिकेशन- या व्यवसाय-परत कैशिंग लगभग इतना साफ नहीं है। इसके लिए अन्य व्यवसाय तर्क के बीच में कैश प्रबंधन संचालन या संकेत सम्मिलित करने की आवश्यकता होती है, जो व्यवसाय कोड को अधिक जटिल बनाता है। लेकिन ट्रेडऑफ़ यह है: मैक्रो-स्तरीय डेटा कैसे संरचित है और कौन से संचालन सामने आ रहे हैं, इसका अधिक ज्ञान होने पर, यह इष्टतम ("क्लेयरवॉयंट" या "बेलेडी मिन") कैशिंग दक्षता के लगभग बेहतर अवसर है।

चाहे व्यवसाय / एप्लिकेशन कोड में कैश प्रबंधन जिम्मेदारी डालने से समझ में आता है कि एक निर्णय कॉल है, और अनुप्रयोगों द्वारा अलग-अलग होगा। कई मामलों में, जबकि यह ज्ञात है कि डीएएल / दृढ़ता की परतें इसे "पूरी तरह से सही" नहीं पाएंगी, ट्रेडऑफ़ यह है कि वे एक बहुत अच्छा काम कर सकते हैं, कि वे एक वास्तुशिल्प रूप से "साफ" और बहुत अधिक गहन परीक्षण योग्य तरीके से ऐसा करते हैं। , और वह निम्न-स्तरीय पकड़ने वाला व्यवसाय / ऐप कोड की जटिलता को बढ़ाने से बचता है।

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


उत्तर के लिए धन्यवाद। आपके और दूसरों के उत्तरों को पढ़ने के बाद, मुझे लगता है कि मुझे निश्चित रूप से व्यावसायिक परत में कैश करने की आवश्यकता नहीं है। यह सिर्फ उत्पाद की समग्र जटिलता को जोड़ देगा।
एम्मा

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

1
बहुत बढ़िया बात, @supercat मैं एक संकेत / व्यावहारिक रणनीति का उल्लेख करने जा रहा था, लेकिन जवाब बहुत पहले ही था। लेकिन आप बिलकुल सही कह रहे हैं। व्यवसाय परत कम परतों को संकेत देती है कि कैश को कैसे प्राथमिकता दी जाए, या "क्या पिन करना है", व्यापार कोड बनाने के बिना उच्च स्तरीय कैशिंग प्राप्त करने के लिए एक बहुत ही सामान्य / उपयोगी तरीका है, या अपने स्वयं के भंडारण के प्रबंधन में बहुत अधिक पकड़े जाते हैं। पदानुक्रम।
जोनाथन यूनिस

@JonathanEunice: संकेत के बारे में एक अच्छी बात यह है कि कोड को शुरू में उनके साथ ज्यादा कुछ करने की जरूरत नहीं है। बहुत सी प्रणालियों में कुछ स्पष्ट अड़चनें होती हैं जो उनके प्रदर्शन पर हावी होती हैं, लेकिन यह कठिन भविष्यवाणी हो सकती है कि कौन से मामले के लिए बुरा होगा। कुछ महत्वपूर्ण स्थानों में बदसूरत कैशिंग लॉजिक की एक छोटी मात्रा को जोड़ना उन कैशिंग लॉजिक के बहुत से स्थानों पर फेंकने से बेहतर हो सकता है जो वास्तव में मायने रखते हैं।
सुपरकाट

1
ठीक ठीक। खासकर यदि आपके पास "बहुत अच्छा" निम्न-स्तरीय कैशिंग दृढ़ता / पहुंच परत पर पहले से ही है। आपको "बहुत अच्छा" से "वास्तव में अच्छा" जाने के लिए केवल थोड़ी अतिरिक्त प्राथमिकता वाली जानकारी की आवश्यकता हो सकती है।
जोनाथन यूनिस

16

DAL पर कैशिंग सीधा और सरल है

आपका डीएएल केंद्रीय डेटा एक्सेस लेयर है, जिसका अर्थ है कि किसी भी और सभी डेटा एक्सेस को वहां की कक्षाओं के माध्यम से नियंत्रित किया जा सकता है। चूँकि उन परतों पर पढ़ना और जारी रहना दोनों होता है, इसलिए कैश एंट्री को साफ़ करना या अपडेट करना उतना ही आसान है जितना कि परिवर्तन होता है।

व्यवसाय में कैशिंग लचीला है

व्यवसाय पर कैशिंग करने से डेवलपर्स को यह निर्धारित करने की सुविधा मिलती है कि कैशिंग से किसी वस्तु का ठोस उपयोग होगा या नहीं। अनुप्रयोग बैक-एंड सेवाओं या स्वचालित प्रक्रियाओं की संरचना के आधार पर अन्य भागों में कैश्ड डेटा को परिवर्तित किया जा सकता है। व्यवसाय में कैशिंग के साथ एक डेवलपर यह निर्धारित कर सकता है कि क्या किसी निश्चित व्यावसायिक वस्तु में संभव बासी डेटा और प्रदर्शन होगा, या प्रदर्शन की कीमत पर किसी व्यावसायिक वस्तु की सबसे अद्यतित स्थिति है।

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