क्या मुझे डेटा को कैश करना चाहिए या डेटाबेस को हिट करना चाहिए?


10

मैंने किसी भी कैशिंग तंत्र के साथ काम नहीं किया है और सोच रहा था कि निम्नलिखित परिदृश्य के लिए .net दुनिया में मेरे विकल्प क्या हैं।

हमारे पास मूल रूप से एक REST सेवा है जहां उपयोगकर्ता एक श्रेणी (विचार फ़ोल्डर) की एक आईडी पास करता है और इस श्रेणी में बहुत सारी उप श्रेणियां हो सकती हैं और प्रत्येक उप श्रेणियों में 1000 मीडिया कंटेनर हो सकते हैं (विचार फ़ाइल संदर्भ ऑब्जेक्ट) जिसमें जानकारी होती है एक फ़ाइल जो NAS या SAN सर्वर पर हो सकती है (फाइलें इस मामले में वीडियो हैं)। इन श्रेणियों के बीच संबंध डेटाबेस में उप-श्रेणियों के बारे में कुछ अनुमति नियमों और मेटा डेटा के साथ संग्रहीत किया जाता है।

इसलिए यूआई के नजरिए से हमारे पास एक आलसी लोडेड ट्री कंट्रोल है जो प्रत्येक उप फ़ोल्डर (विंडोज एक्सप्लोरर के बारे में सोचकर) पर क्लिक करके उपयोगकर्ता द्वारा संचालित होता है। एक बार जब वे वीडियो फ़ाइल के URL पर आते हैं, तब वे वीडियो देख सकते हैं।

उपयोगकर्ताओं की संख्या अतिरिक्त और उप श्रेणियों में बढ़ सकती है और वीडियो 10000 में हो सकता है क्योंकि सिस्टम बढ़ता है।

सवाल यह है कि क्या हमें उस समय काम करना चाहिए जब वह वर्तमान में काम कर रहा है जहां प्रत्येक अनुरोध डेटाबेस को हिट करता है या हमें डेटा को कैशिंग के बारे में सोचना चाहिए?

हम IIS 6/7 और Asp.net का उपयोग कर रहे हैं।


4
क्या आपने एक यथार्थवादी लोड के तहत अपने सिस्टम को प्रोफाइल किया है? क्या डेटा कैश किया जा सकता है? यह समझ में आता है?

जवाबों:


13

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

आगे आपको निम्नलिखित का उत्तर जानने की आवश्यकता है:

1) क्या बार-बार डेटा बदलेगा? 2) क्या इन अपडेट्स को प्राप्त करने के लिए एप्लिकेशन अक्सर आपकी REST सेवा को प्रदूषित करता है? 3) क्या डेटाबेस अन्य उद्देश्य के लिए उपयोग किया जाता है? 4) क्या आप किसी भी मौजूदा प्रदर्शन मुद्दों के बारे में जानते हैं? 5) क्या डेटा आपके एप्लिकेशन द्वारा अपडेट किया गया है और क्या उन अपडेट को ऐप में प्रतिबिंबित करने की आवश्यकता है?

दिलचस्प बात यह है कि डेटाबेस का उपयोग करके, आप तकनीकी रूप से पहले से ही डेटा को कैशिंग कर रहे हैं। यही एक डेटाबेस करता है। बहुत से आरएंडडी डेटा को पुनः प्राप्त करने के लिए डेटाबेस को जितनी जल्दी हो सके बनाने में जाता है। उदाहरण के लिए अक्सर उपयोग किए जाने वाले डेटा के लिए यह स्वयं के मेमोरी कैश का उपयोग करता है।

तो अपने आप से पूछें कि कैश प्रदाताओं को स्वैप करने से आपको क्या उम्मीद है? और वर्तमान सीमाएं क्या हैं जिन्हें संबोधित करने की आवश्यकता है?

यदि आप वर्तमान में किसी भी धीमे चढ़ाव का अनुभव नहीं कर रहे हैं तो मैं बस "नहीं, स्विच करने की कोई आवश्यकता नहीं" कहूंगा।

यह वास्तव में एक बड़ा विषय है। जब डेटा को भौगोलिक रूप से वितरित करने की आवश्यकता होती है, तो कैश वास्तव में अच्छी तरह से करते हैं, लेकिन प्रबंधन के मामले में एक बड़ा ओवरहेड है।

मैं इस समय एक प्रोजेक्ट कर रहा हूं जहां मैं बिल्कुल उसी तरह के फैसले कर रहा हूं।

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

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


धन्यवाद इयान। इस स्तर पर हमारे पास एक डेटाबेस है, लेकिन इसे देखने के लिए चीजों पर एक शैक्षिक प्रश्न अधिक था।
JD01

18

वास्तव में Thorbjørn की टिप्पणियों के अनुसार पर्याप्त जानकारी नहीं है।

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

इसलिए, ऐसी जानकारी के अभाव में जो आपको इंगित करती है कि वास्तव में कैश की आवश्यकता है, कैश की नहीं।

[अनुकूलन का सामान्य नियम: यदि आपको यह पूछने की आवश्यकता है कि क्या मुझे कुछ करना चाहिए, तो उत्तर नहीं है] *
* यह एक कथन होगा, एक प्रश्न नहीं, अधिकांश स्थानों पर जहां उत्तर हां है।


सामान्य नियम से प्यार करो, अच्छी तरह से कहा :)
इयान

@ dan-mcgrath क्या प्रविष्टियों को कैश करना एक अच्छा विचार है यदि मैं प्रत्येक प्रविष्टि को केवल 5 मिनट के अंतराल के दौरान 2 बार ही एक्सेस करने जा रहा हूं और उसके बाद कभी नहीं?
निशांत भारद्वाज २००२
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.