Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डेटाबेस डिज़ाइन में विभिन्न MySQL संग्रहण इंजनों का उपयोग करना

MySQL डेटाबेस को डिजाइन करने वाले किसी भी डेटाबेस आर्किटेक्ट को उचित स्टोरेज इंजन के चयन की समस्या का सामना करना पड़ता है। आमतौर पर, कोई एप्लिकेशन केवल एक इंजन का उपयोग करता है:MyISAM या InnoDB . लेकिन आइए थोड़ा और लचीला होने का प्रयास करें और कल्पना करें कि विभिन्न स्टोरेज इंजनों का उपयोग कैसे किया जा सकता है।

प्रारंभिक डेटा मॉडल

शुरू करने के लिए, आइए एक सीआरएम (ग्राहक संबंध प्रबंधन) प्रणाली के लिए एक सरलीकृत डेटा मॉडल बनाएं जिसका उपयोग हम बिंदु को स्पष्ट करने के लिए करेंगे। डिजाइन मुख्य सीआरएम कार्यों को कवर करेगा:बिक्री डेटा, उत्पाद परिभाषाएं और विश्लेषिकी के लिए जानकारी। इसमें आमतौर पर CRM सिस्टम में उपयोग किए जाने वाले विवरण शामिल नहीं होंगे।




जैसा कि आप देख सकते हैं, इस डेटा मॉडल में ऐसी तालिकाएँ हैं जो sale और sale_item . जब कोई ग्राहक कुछ खरीदता है, तो एप्लिकेशन sale टेबल। प्रत्येक खरीदा गया उत्पाद sale_item टेबल। एक संबंधित तालिका, sale_status , संभावित स्थितियों (यानी, लंबित, पूर्ण, आदि) को संग्रहीत करने के लिए है।

product टेबल माल के बारे में जानकारी संग्रहीत करता है। यह प्रत्येक उत्पाद और उसके मूल विवरणकों को परिभाषित करता है। अधिक विस्तृत आरेख में, मैं उत्पाद विनिर्देश और वर्गीकरण को संभालने के लिए और तालिकाओं को जोड़ूंगा। लेकिन हमारी वर्तमान जरूरतों के लिए, यह आवश्यक नहीं है।

ग्राहक तालिका ग्राहकों के बारे में डेटा रखती है। यह किसी भी सीआरएम सिस्टम का एक अभिन्न अंग है और यह आमतौर पर सभी उपयोगकर्ताओं की व्यक्तिगत गतिविधि को ट्रैक करता है। जाहिर है, इसमें अक्सर वास्तव में विस्तृत जानकारी होती है। लेकिन जैसा कि मैंने नोट किया, हमें अभी इन विवरणों की आवश्यकता नहीं है।

log टेबल स्टोर करता है कि प्रत्येक ग्राहक ने आवेदन के भीतर क्या किया। और report_sales तालिका डेटा विश्लेषिकी उपयोग के लिए डिज़ाइन की गई है।

इसके बाद, मैं MySQL स्टोरेज इंजनों का वर्णन करूँगा जो संभवतः इस डिज़ाइन में उपयोग किए जा सकते हैं। और बाद में, हम चर्चा करेंगे कि प्रत्येक प्रकार की तालिका के लिए कौन सा इंजन उपयुक्त है।

MySQL स्टोरेज इंजन का अवलोकन

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

  • माईसाम MySQL के साथ एक लंबा इतिहास रहा है। यह 5.5 रिलीज से पहले MySQL डेटाबेस के लिए डिफ़ॉल्ट इंजन था। MyISAM लेनदेन का समर्थन नहीं करता है और इसमें केवल टेबल-लेवल लॉकिंग है। यह ज्यादातर पढ़ने के लिए गहन अनुप्रयोगों के लिए उपयोग किया जाता है।
  • InnoDB एक सामान्य भंडारण इंजन है जो उच्च विश्वसनीयता और अच्छे प्रदर्शन को संतुलित करता है। यह लेन-देन, पंक्ति-स्तरीय लॉकिंग, क्रैश रिकवरी और बहु-संस्करण समवर्ती नियंत्रण का समर्थन करता है। साथ ही, यह एक विदेशी कुंजी संदर्भात्मक अखंडता बाधा प्रदान करता है।
  • मेमोरी इंजन सभी डेटा को RAM में स्टोर करता है। इसका उपयोग लुकअप संदर्भों को संग्रहीत करने के लिए किया जा सकता है।
  • एक और इंजन, सीएसवी , पाठ फ़ाइलों में डेटा को अल्पविराम से अलग किए गए मानों के साथ रखता है। यह प्रारूप ज्यादातर अन्य प्रणालियों के साथ एकीकरण के लिए उपयोग किया जाता है।
  • मर्ज करें रिपोर्टिंग सिस्टम के लिए एक अच्छा विकल्प है, जैसे डेटा वेयरहाउसिंग में। यह समान MyISAM तालिकाओं के एक सेट के तार्किक समूहन की अनुमति देता है, जिसे एक वस्तु के रूप में भी संदर्भित किया जा सकता है।
  • संग्रह करें उच्च गति डालने के लिए अनुकूलित है। यह कॉम्पैक्ट, अनइंडेक्स्ड टेबल में जानकारी संग्रहीत करता है और लेनदेन का समर्थन नहीं करता है। पुरालेख भंडारण इंजन बड़ी मात्रा में दुर्लभ-संदर्भित ऐतिहासिक या संग्रहीत डेटा रखने के लिए आदर्श है।
  • संघीय इंजन MySQL सर्वर को अलग करने या कई भौतिक सर्वरों से एक तार्किक डेटाबेस बनाने की क्षमता प्रदान करता है। स्थानीय तालिकाओं पर कोई डेटा संग्रहीत नहीं किया जाता है और दूरस्थ (संघीय) तालिकाओं पर स्वचालित रूप से क्वेरी निष्पादित की जाती हैं।
  • ब्लैकहोल इंजन एक "ब्लैक होल" के रूप में कार्य करता है जो डेटा स्वीकार करता है लेकिन इसे संग्रहीत नहीं करता है। सभी चयन एक खाली डेटासेट लौटाते हैं।
  • इंजन उदाहरण नए भंडारण इंजनों को विकसित करने का तरीका दिखाने के लिए प्रयोग किया जाता है।

यह स्टोरेज इंजन की पूरी सूची नहीं है। MySQL 5.x बॉक्स से सीधे उनमें से नौ का समर्थन करता है, साथ ही MySQL समुदाय द्वारा विकसित दर्जनों अन्य। स्टोरेज इंजन के बारे में अधिक विवरण MySQL के आधिकारिक दस्तावेज पर पाया जा सकता है।

डेटा मॉडल डिज़ाइन अपडेट करना

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

आइए उपरोक्त बिंदुओं को ध्यान में रखें और हमारे डेटाबेस स्कीमा को संशोधित करें। Vertabelo में, आप टेबल प्रॉपर्टी . में "स्टोरेज इंजन" सेट कर सकते हैं पैनल। कृपया नीचे दी गई तस्वीरों को देखें।


भंडारण इंजन सेट करना

तो, आइए अपडेटेड डेटाबेस डिज़ाइन देखें।




मैंने मौजूदा तालिकाओं के लिए भंडारण इंजन निर्दिष्ट किए और report_sales टेबल। जैसा कि आप देख सकते हैं, तालिकाओं को तीन समूहों में बांटा गया है:

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

आइए उन सभी के बारे में अलग से बात करते हैं।

लेन-देन तालिका

इन तालिकाओं में दैनिक दिनचर्या के संचालन के दौरान उपयोगकर्ताओं द्वारा दर्ज किया गया डेटा होता है। हमारे मामले में, बिक्री की जानकारी होगी, जैसे:

  • किस कर्मचारी ने बिक्री की
  • उत्पाद किसने खरीदा
  • क्या बेचा गया
  • इसकी कीमत कितनी है

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

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

रिपोर्ट टेबल

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

Report_sale_{year} टेबल माईसाम टेबल हैं। यह स्टोरेज इंजन लेन-देन का समर्थन नहीं करता है और केवल टेबल को पूरी तरह से लॉक कर सकता है। क्योंकि MyISAM इन जटिल वस्तुओं के बारे में चिंता नहीं करता है, यह गति से डेटा हेरफेर संचालन करता है। इसकी फ़ाइल संरचना के कारण, यह स्टोरेज इंजन अधिक लोकप्रिय InnoDB की तुलना में डेटा को तेज़ी से पढ़ता है।

लॉग टेबल

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

भंडारण इंजन को एकीकृत करना

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

MySQL और Oracle ने वास्तव में दो उपयोगी स्टोरेज इंजन विकसित किए हैं:संघीय और सीएसवी . पहला, संघीय , बाहरी MySQL डेटाबेस से डेटा लोड करने के लिए उपयोग किया जाना चाहिए। दूसरा स्टोरेज इंजन, CSV , डेटाबेस को बिना किसी अतिरिक्त प्रयास के CSV प्रारूप में रिकॉर्ड सहेजने और अल्पविराम से अलग की गई फ़ाइलों को ऑन एयर पढ़ने की अनुमति देता है।

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

क्या आपके पास डेटाबेस डिज़ाइन में विभिन्न स्टोरेज इंजनों का उपयोग करने का अनुभव है? मैं आपके सुझावों और सुझावों को देखना चाहता हूं। कृपया उन्हें टिप्पणी अनुभाग में साझा करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL कैसे सीमा में लापता तिथियों को भरने के लिए?

  2. MySQL कनेक्शन (max_connections) कैसे बढ़ाएं?

  3. PHP का उपयोग कर सर्वर पर छवि अपलोड करते समय अन्य जानकारी के साथ डेटाबेस में फ़ाइल नाम कैसे स्टोर करें?

  4. पायथन के माध्यम से कनेक्ट करते समय मैं डिफ़ॉल्ट MySQL कनेक्शन टाइमआउट कैसे बदल सकता हूं?

  5. MySQL में टेबल दिखाएं