14

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

एक तर्क दूसरे स्तर के कैश से छुटकारा पाने और डीबी को अनुकूलित करने और ट्यून करने पर केंद्रित है। दूसरा तर्क दूसरे स्तर के कैश के रूप में वितरित कैश को रोल करना है।

मैं लोगों समर्थक और चोर डीबी के यहाँ वितरित कैश (प्रयास में फैक्टरिंग शामिल, लागत, जटिलता, आदि)

उत्तर

13

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

5

दो शब्द: इसे मापें।

चूंकि आपके पास पहले से ही इसे कैश लागू करने के बाद से आप शायद यह माप सकते हैं कि बेंचमार्क उद्देश्यों के लिए इसे बंद करने का क्या प्रभाव होगा।

2

यह एक बहुत ही कठिन विषय है। किसी भी मामले में आपको दक्षता की आवश्यकता है। या तो एक बहुत ही कुशल डीबीए, या एक बहुत ही कुशल NHibernate/कैश व्यवस्थापक।

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

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

8

दोनों। डेटाबेस में अनावश्यक कॉल और ट्यून किए गए डेटाबेस को रोकने के लिए आपके पास एक वितरित कैश होना चाहिए ताकि शुरुआती कॉल तुरंत लौटा दी जाए। उदाहरण के तौर पर, फेसबुक को स्केल करने के लिए कैशिंग की एक महत्वपूर्ण मात्रा की आवश्यकता होती है, लेकिन मुझे यकीन है कि शुरुआती प्रश्नों में 10 मिनट लगने पर यह बहुत अच्छा नहीं होगा। :)

5

मुझे लगता है कि एक बहु-वेब सर्वर और एक वितरित द्वितीय स्तर कैश कर सकता है -और शायद-साथ-साथ मिलना चाहिए।

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

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

यह विशेष रूप से इस मामले के लिए सच है कि वेब-नोड 1 अनुरोध डेटासेट ए और वेब-नोड 2 अनुरोध डेटासेट ए -> आप एक ही प्रश्न दो बार करने जा रहे हैं जबकि दूसरे स्तर के कैशिंग के साथ आप केवल एक बार ऐसा करते हैं।

तो मेरी सिफारिश है:

अपने दूसरे स्तर कैश मार नहीं करो। आपने इसे लागू करने के लिए पहले ही संसाधन खर्च किए हैं और इसे अक्षम करके आप अपने आवेदन के प्रदर्शन में सुधार नहीं करेंगे। यहां तक ​​कि किसी भी होने की तुलना में memcached का एक भी नोड तेजी से होने जा रहा है।

अपने डेटाबेस संचालन को अनुकूलित करें। इसका मतलब डेटाबेस पक्ष (इंडेक्स, विचार, एसपी, फ़ंक्शंस, शायद केवल पढ़ने के लिए एक क्लस्टर और केवल-पढ़ने वाले नोड्स के साथ क्लस्टर) और एप्लिकेशन साइड (आपके प्रश्नों को अनुकूलित करें, आलसी/उत्सुक लोडिंग प्रोफाइलिंग, डेटा को प्राप्त न करें की आवश्यकता नहीं है, भविष्य, MutliQuery, MultiCriteria के माध्यम से एकल-राउंड-ट्रिप में एकाधिक प्रश्नों को गठबंधन करें)

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

तो शाब्दिक प्रश्नों का उपयोग कर हर रोज आपरेशन डेटाबेस के पूर्ण-पाठ क्षमताओं का उपयोग करें या और भी बेहतर, Lucene.NET की तरह एक स्वतंत्र सेवा (जो NHibernate.Search के माध्यम से NHibernate के साथ एकीकृत किया जा सकता)

1

हम का उपयोग का उपयोग करें बड़ी सफलता के साथ माइक्रोसॉफ्ट ऐपफैब्रिक वितरित कैश फ्रेमवर्क (NHibernate Velocity Provider) का उपयोग कर हमारे बहु-सर्वर वातावरण में NHibernate का दूसरा स्तर कैश।

यह कहकर कि, दूसरे स्तर के कैश का उपयोग करके अप्रत्याशित परिणामों को रोकने के लिए ढांचे की गहरी समझ की आवश्यकता होती है। इसके अलावा, वितरित कैश का उपयोग करने से पहले, अपने ओवरहेड को मापना महत्वपूर्ण है।

तो मेरा जवाब मूल रूप से - द्वितीय-स्तर के कैश का उपयोग करने से पहले, आपको वास्तव में परीक्षण करना चाहिए और देखना चाहिए कि वास्तव में इसकी आवश्यकता है या नहीं।

+0

क्या आप कुछ गड़िया या मुद्दों के बारे में चिंता करने के लिए उजागर कर सकते हैं। मापने के लिए आपके द्वारा उपयोग किए जाने वाले सर्वोत्तम मीट्रिक भी क्या हैं ?? – leora

संबंधित मुद्दे