CodeGym/Java Course/All lectures for HI purposes/डेटा नमूनाकरण दर अनुकूलन

डेटा नमूनाकरण दर अनुकूलन

उपलब्ध

6.1 परिचय

अब सिद्धांत से अभ्यास की ओर बढ़ते हैं।

"सिद्धांत रूप में, सिद्धांत और व्यवहार के बीच कोई अंतर नहीं है। व्यवहार में, वे हैं।"

हम वास्तविक दुनिया में रहते हैं और सभी सॉफ्टवेयर उत्पाद अंततः जीवित लोगों के लिए बनाए गए हैं। और ये जीवित लोग धीमी गति से लोड होने वाली साइटों और धीमी गति से चलने वाले कार्यक्रमों से बहुत चिढ़ जाते हैं।

और यदि डेटाबेस क्वेरी में एक सेकंड से अधिक समय लगता है, तो यह अस्वीकार्य है । उपयोगकर्ता केवल ऐसे उत्पाद का उपयोग नहीं करेंगे जिसके पृष्ठ/कार्यक्षमता इतनी धीमी है।

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

यहाँ शीर्ष 5 तरीके हैं जिनसे प्रोग्रामर डेटाबेस प्रश्नों को गति देते हैं:

  1. डेटाबेस में तालिकाओं में अनुक्रमणिका जोड़ना।
  2. पुनर्लेखन और प्रश्नों का अनुकूलन।
  3. डेटाबेस साइड पर कैशिंग को सक्षम (और कॉन्फ़िगर) करें।
  4. क्लाइंट साइड पर कैशिंग सक्षम करें।
  5. डेटाबेस डीनॉर्मलाइजेशन करना।

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

6.2 सूचकांक

यह कोई रहस्य नहीं है कि डेटाबेस के साथ काम करने में लगभग किसी भी साइट का अधिकांश काम हो जाता है। और यह डेटाबेस के साथ काम कर रहा है जो अक्सर वेब एप्लिकेशन की बाधा है।

इस लेख में मैं MySQL का उपयोग करने पर व्यावहारिक सलाह देना चाहूंगा।

मैं तुरंत कहूंगा:

  • यह लेख MySQL के बारे में लिखा गया है, हालाँकि किसी भी DBMS के लिए सामान्य बातें सच होने की संभावना है।
  • लेख में लिखी गई हर बात मेरा निजी दृष्टिकोण है, और यह अंतिम सत्य नहीं है।
  • सलाह नई होने का ढोंग नहीं करती है और पढ़े गए साहित्य और व्यक्तिगत अनुभव के सामान्यीकरण का परिणाम है।
  • इस आलेख के ढांचे के भीतर, मैं MySQL कॉन्फ़िगरेशन मुद्दों पर स्पर्श नहीं करूँगा।

MySQL का उपयोग करते समय आने वाली समस्याओं को निम्नलिखित तीन समूहों में विभाजित किया जा सकता है (महत्व के क्रम में):

  1. इंडेक्स का गैर-उपयोग या दुरुपयोग।
  2. गलत डेटाबेस संरचना।
  3. गलत \ सबऑप्टिमल SQL क्वेरीज़।

आइए इनमें से प्रत्येक समूह पर करीब से नज़र डालें।

इंडेक्स का उपयोग करना

इंडेक्स का उपयोग या दुरुपयोग नहीं करना अक्सर प्रश्नों को धीमा कर देता है। उन लोगों के लिए जो अनुक्रमणिका के काम करने के तरीके से परिचित नहीं हैं या अभी तक मैनुअल में इसके बारे में नहीं पढ़ा है, मैं दृढ़ता से आपको इसे पढ़ने की सलाह देता हूं।

अनुक्रमणिका का उपयोग करने के लिए युक्तियाँ:

  • आपको हर चीज को इंडेक्स करने की जरूरत नहीं है । अक्सर, अर्थ समझे बिना, लोग तालिका के सभी क्षेत्रों को अनुक्रमित कर देते हैं। इंडेक्स प्राप्त करने की गति बढ़ाते हैं, लेकिन पंक्ति प्रविष्टि और अपडेट धीमा कर देते हैं, इसलिए प्रत्येक इंडेक्स का चुनाव सार्थक होना चाहिए।
  • सूचकांक की विशेषता बताने वाले मुख्य मापदंडों में से एक चयनात्मकता है, जो सूचकांक में विभिन्न तत्वों की संख्या है। ऐसे क्षेत्र को अनुक्रमित करने का कोई मतलब नहीं है जिसमें दो या तीन संभावित मान हों। ऐसे इंडेक्स से बहुत कम फायदा होगा।
  • अनुक्रमितों के चयन की शुरुआत दी गई तालिका के विरुद्ध सभी प्रश्नों के विश्लेषण से होनी चाहिए। बहुत बार, इस तरह के विश्लेषण के बाद, तीन या चार सूचकांकों के बजाय, आप एक समग्र सूचकांक बना सकते हैं।
  • कंपोजिट इंडेक्स का उपयोग करते समय, इंडेक्स में फ़ील्ड्स का क्रम महत्वपूर्ण होता है।
  • इंडेक्स को कवर करना न भूलें। यदि किसी क्वेरी में सभी डेटा को इंडेक्स से पुनर्प्राप्त किया जा सकता है, तो MySQL सीधे तालिका तक नहीं पहुंचेगा। ऐसे अनुरोधों को बहुत जल्दी क्रियान्वित किया जाएगा। उदाहरण के लिए, एक अनुक्रमणिका (लॉगिन, नाम) के साथ क्वेरी के लिए SELECT name FROM user WHERE login='test', तालिका तक पहुंच की आवश्यकता नहीं है। कभी-कभी समग्र अनुक्रमणिका में एक अतिरिक्त फ़ील्ड जोड़ने का अर्थ होता है, जो अनुक्रमणिका को कवर करेगा और प्रश्नों को गति देगा।
  • पंक्ति अनुक्रमणिका के लिए, यह अक्सर पंक्ति के केवल भाग को अनुक्रमित करने के लिए पर्याप्त होता है। यह सूचकांक के आकार को काफी कम कर सकता है।
  • यदि %यह शुरुआत में है, तो LIKE(SELECT * FROM table WHERE field LIKE '%test')अनुक्रमणिका का उपयोग नहीं किया जाएगा।
  • FULLTEXT अनुक्रमणिका का उपयोग केवल MATCH ... AGAINST सिंटैक्स के साथ किया जाता है ।

6.3 डेटाबेस संरचना

एक अच्छी तरह से डिज़ाइन किया गया डेटाबेस डेटाबेस के साथ तेज़ और कुशल कार्य की कुंजी है। दूसरी ओर, एक खराब डिज़ाइन किया गया डेटाबेस हमेशा डेवलपर्स के लिए सिरदर्द होता है।

डेटाबेस डिजाइन युक्तियाँ:

  1. सबसे छोटे संभव डेटा प्रकारों का उपयोग करें। डेटा प्रकार जितना बड़ा होगा, तालिका जितनी बड़ी होगी, डेटा प्राप्त करने के लिए उतने ही अधिक डिस्क एक्सेस की आवश्यकता होगी। एक बहुत ही सुविधाजनक प्रक्रिया का प्रयोग करें: SELECT * FROM table_name PROCEDURE ANALYSE();न्यूनतम संभव डेटा प्रकार निर्धारित करने के लिए।
  2. डिजाइन चरण के दौरान सामान्य रूपों का निरीक्षण करें। अक्सर प्रोग्रामर इस स्तर पर पहले से ही असामान्यकरण का सहारा लेते हैं। हालांकि, ज्यादातर मामलों में, परियोजना की शुरुआत में, यह स्पष्ट नहीं है कि इसका परिणाम कैसे हो सकता है। उप-इष्टतम रूप से असामान्य रूप से पीड़ित होने की तुलना में तालिका को असामान्य करना बहुत आसान है। और JOINकभी-कभी यह गलत तरीके से विकृत तालिकाओं की तुलना में तेज़ी से काम करता है।
  3. कॉलम का उपयोग तब तक न करें NULLजब तक आपको सचेत रूप से उनकी आवश्यकता न हो।

6.4 एसक्यूएल प्रश्न।

जितनी बार हो सके मूल SQL में सभी प्रश्नों को फिर से लिखने की इच्छा होती है ताकि क्वेरी जितनी जल्दी हो सके। यदि आप ऐसा करने का निर्णय लेते हैं, तो यहां कुछ सुझाव दिए गए हैं:

  1. लूप में अनुरोधों से बचें। एसक्यूएल सेट की एक भाषा है, और लेखन प्रश्नों को कार्यों की भाषा में नहीं, बल्कि सेट की भाषा में संपर्क किया जाना चाहिए।
  2. *प्रश्नों में (तारांकन) से बचें । बेझिझक अपने द्वारा चुने गए क्षेत्रों को सूचीबद्ध करें। इससे प्राप्त और भेजे गए डेटा की मात्रा कम हो जाएगी। साथ ही, इंडेक्स को कवर करना न भूलें। यहां तक ​​कि अगर आप तालिका में सभी फ़ील्ड का चयन करते हैं, तो उन्हें सूचीबद्ध करना बेहतर होगा। सबसे पहले , यह कोड की पठनीयता में सुधार करता है। तारांकन का उपयोग करते समय, यह पता लगाना असंभव है कि तालिका में कौन से फ़ील्ड देखे बिना हैं। दूसरे , आज आपकी तालिका में पाँच INT कॉलम हैं, और एक महीने बाद एक और TEXT और BLOB जोड़े गए , और तारांकन जैसा था वैसा ही बना रहा।
  3. पृष्ठांकित होने पर, रिकॉर्ड्स की कुल संख्या प्राप्त करने के लिए, SQL_CALC_FOUND_ROWSऔर SELECT FOUND_ROWS();जब उपयोग किया जाता है SQL_CALC_FOUND_ROWS MySQL, पंक्तियों की चयनित संख्या को कैश करता है (LIMIT लागू होने से पहले), और जब उपयोग किया जाता है, तो SELECT FOUND_ROWS()क्वेरी को फिर से निष्पादित किए बिना केवल इस कैश किए गए मान को लौटाता है।
  4. यह न भूलें कि INSERTएकाधिक आवेषणों के लिए एक वाक्यविन्यास है। एक क्वेरी एक लूप में एकाधिक क्वेरीज़ की तुलना में तीव्रता के क्रम को तेजी से चलाएगी।
  5. वहां उपयोग करें LIMITजहां आपको सभी डेटा की आवश्यकता नहीं है।
  6. INSERT… ON DUPLICATE KEY UPDATE…चयन के स्थान पर और INSERTया UPDATEचयन के बाद और अक्सर के स्थान पर उपयोग करें REPLACE
  7. इस अद्भुत विशेषता को मत भूलना GROUP_CONCAT। यह जटिल प्रश्नों में मदद कर सकता है।
टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं