प्रमुख SQL डेटाबेस कार्यान्वयन पर Mnesia के क्या फायदे हैं और यह उनके लिए कैसे भिन्न है?
क्या मैं ध्यान देने योग्य प्रदर्शन में गिरावट के बिना वास्तव में बड़ी मात्रा में डेटा रखने के लिए डेटाबेस का उपयोग कर सकता हूं?
प्रमुख SQL डेटाबेस कार्यान्वयन पर Mnesia के क्या फायदे हैं और यह उनके लिए कैसे भिन्न है?
क्या मैं ध्यान देने योग्य प्रदर्शन में गिरावट के बिना वास्तव में बड़ी मात्रा में डेटा रखने के लिए डेटाबेस का उपयोग कर सकता हूं?
जवाबों:
पार्टी में देर से आने के लिए क्षमा करें। :) यहाँ मेरा जवाब है, 1996 से Mnesia और 1988 के बाद से विभिन्न अन्य डेटाबेस तकनीकों का उपयोग करने के आधार पर।
Mnesia और MySQL वास्तव में अलग-अलग जानवर हैं, और जो सबसे अच्छा है वह इस बात पर बहुत निर्भर करता है कि आप इसका उपयोग कैसे करना चाहते हैं।
यदि आपका आवेदन Erlang में लिखा गया है, तो Mnesia आपको अपने एप्लिकेशन के समान डेटा को उसी मेमोरी स्पेस में संग्रहीत करने की अनुमति देता है, जिसका अर्थ है कि आप कुछ माइक्रोसेकंड के रूप में एक ही डेटा ऑब्जेक्ट को जल्दी से प्राप्त कर सकते हैं। MySQL में यह संभव नहीं है, क्योंकि आपके एप्लिकेशन और डेटाबेस को मेमोरी में अलग किया जाएगा। Mnesia ऐसा कर सकता है और फिर भी मजबूत हो सकता है, इसका कारण यह है कि Erlang भाषा के स्तर पर 'सुरक्षा' को लागू करता है।
कुल मिलाकर, SQL डेटाबेस विलंबता के माध्यम से थ्रूपुट का पक्ष लेते हैं, और जब विलंबता की बात आती है, Mnesia + Erlang आम तौर पर बकाया होते हैं। आपको यह तय करने की आवश्यकता है कि आपके लिए कौन सा सबसे महत्वपूर्ण है। जैसा कि डॉक्स (ऊपर) में कहा गया है, मेन्सिया के लक्ष्य एप्लिकेशन टेलिकॉम स्विचिंग एप्लिकेशन थे, जहां कॉल सेटअप के लिए प्रतिक्रिया समय की आवश्यकताएं लगभग 20 एमएस थीं। यह अनिवार्य रूप से मतलब है कि आप डेटाबेस से केवल तभी पढ़ सकते हैं जब डेटा साझा मेमोरी में था, लेकिन प्रति-कॉल-सेटअप आधार पर लगातार भंडारण के लिए लिखने से बचना होगा। OTOH, इन अनुप्रयोगों को व्यावहारिक रूप से तदर्थ क्वेरी समर्थन की कोई आवश्यकता नहीं है, और बहुत बड़े डेटा सेट का उपयोग नहीं करते हैं। अन्य डोमेन के लिए मानेसिया की उपयुक्तता को बढ़ाने के लिए कुछ काम किया गया है, लेकिन यह एरलांग / ओटीपी विकास टीम के लिए प्राथमिकता नहीं है। मनेसिया यह क्या है, और इस तरह से रहने की संभावना है।
ऊपर दिए गए लिंक में जहां Mnesia और MySQL की तुलना गति के लिए की जाती है, किसी को यह याद रखना होगा कि यह eJabberd में है, जो किसी एकल सर्वर के खिलाफ चलता है यदि वह MySQL है और पूरी तरह से प्रतिकृति डेटाबेस चलाता है यदि वह Mnesia है - और बड़े eJabberd क्लस्टर जितना हो सकता है 10 या अधिक एरांग नोड्स (और इस प्रकार, 10 या अधिक मेन्सिया प्रतिकृतियां)। अतिरेक के दृष्टिकोण से, यह काफी हास्यास्पद और महंगा है, और Mnesia किसी भी तरह से आपको ऐसा करने के लिए मजबूर नहीं करता है। यह स्पष्ट रूप से प्रत्येक नोड पर दुष्ट-तेजी से पढ़ता है, लेकिन लिखना बहुत महंगा होगा। मेरे द्वारा पढ़ी गई कई तुलनाएं एक-नोड MySQL के साथ वितरित मेन्सिया की तुलना करते हुए समाप्त हो गई हैं; यदि MySQL के लिए अतिरेक की आवश्यकता नहीं है, तो इसे मानेसिया के लिए भी आवश्यक नहीं होना चाहिए। Mnesia आपको प्रतिकृति पैटर्न चुनने में काफी लचीला है, और डेटा स्थान एप्लिकेशन के लिए पारदर्शी है।
मनेसिया भी 2 जीबी प्रति टेबल (हालांकि एक विशेष भंडारण विकल्प है) तक सीमित नहीं है। सबसे बड़ा Mnesia डेटाबेस मुझे पता है कि इसमें 600 GB डेटा (64-बिट) RAM + डिस्क है - हालाँकि मैं इसकी अनुशंसा नहीं करता। 10-20 जीबी तक का कुछ भी आधुनिक हार्डवेयर के साथ पूरी तरह से ठीक होना चाहिए, लेकिन पूरी तरह से disc_only_copies छोड़ें और disc_copies का उपयोग करें - यदि आपके पास है तो अधिक रैम खरीदें। मैं शार्दिंग सपोर्ट (mnesia_frag) का उपयोग करने से पहले दो बार सोचता हूं - यह काम करता है, लेकिन शायद ही कभी परेशानी के लायक है।
Mnesia और MySQL के बीच का सबसे बड़ा अंतर शायद SQL ही है: Mnesia में वास्तव में तुलनीय कार्यक्षमता नहीं है; QLC तदर्थ प्रश्नों के लिए कुछ सहायता प्रदान करता है, लेकिन यह SQL के समान लीग में नहीं है, और न ही क्वेरी ऑप्टिमाइज़ेशन का स्तर है। टूलींग और प्रोविजनिंग में, MySQL भी बेहतर है, और यदि आपको एनालिटिक्स की आवश्यकता है, तो कोई सवाल नहीं है, जिसे आपको चुनना चाहिए (यानी Mnesia नहीं)।
मनेसिया देखने का सबसे अच्छा तरीका एर्लांग भाषा के विस्तार के रूप में है। यह आपकी उंगलियों पर सही डेटा डालता है, और छोटे डेटा सेट के लिए उत्कृष्ट है जहां डेटा संरचना और एक्सेस पैटर्न अच्छी तरह से ज्ञात हैं। इस प्रयोजन के लिए, MySQL का उपयोग करना लगभग उतना ही असुविधाजनक है जितना कि MySQL उन चीजों के लिए उपयोग करता है जहां MySQL सबसे अच्छा काम करता है।
अधिकांश एप्लिकेशन बीच में कहीं गिर जाते हैं, और यह वह जगह है जहां यह एक निर्णय कॉल बन जाता है। आप दोनों का उपयोग करके अच्छी तरह से समाप्त हो सकते हैं ...
से प्रलेखन :
Mnesia एक वितरित डेटाबेस प्रबंधन प्रणाली है, दूरसंचार अनुप्रयोगों और अन्य Erlang अनुप्रयोगों के लिए उपयुक्त है जिन्हें निरंतर संचालन और नरम वास्तविक समय गुणों की आवश्यकता होती है। यह ओपन टेलीकॉम प्लेटफ़ॉर्म (ओटीपी) का एक भाग है, जो दूरसंचार अनुप्रयोगों के निर्माण के लिए एक नियंत्रण प्रणाली मंच है।
विशेष रूप से बहुत ही उच्च स्तर की दोष सहिष्णुता की आवश्यकता होती है जो कई नॉनस्टॉप सिस्टम में आवश्यक होती है, आवेदन के रूप में एक ही पते की जगह में चलाने के लिए DBMS पर आवश्यकताओं के साथ मिलकर हमें एक नए DBMS को लागू करने के लिए प्रेरित करता है। मनेसिया कहा जाता है। Mnesia को लागू किया गया है, और बहुत कसकर जुड़ा हुआ है, प्रोग्रामिंग भाषा Erlang है और यह कार्यक्षमता प्रदान करता है जो कि दोष सहिष्णु दूरसंचार प्रणालियों के कार्यान्वयन के लिए आवश्यक है। Mnesia एक बहुउपयोगी डिस्ट्रीब्यूटेड DBMS है जिसे विशेष रूप से प्रतीकात्मक प्रोग्रामिंग लैंग्वेज Erlang में लिखे गए औद्योगिक दूरसंचार अनुप्रयोगों के लिए बनाया गया है, जो कि लक्षित लक्ष्य भाषा भी है। मेन्सिया ठेठ दूरसंचार प्रणालियों के लिए आवश्यक सभी डेटा प्रबंधन मुद्दों को संबोधित करने की कोशिश करता है और इसमें कई विशेषताएं हैं जो सामान्य रूप से पारंपरिक डेटाबेस में नहीं पाई जाती हैं।
दूरसंचार अनुप्रयोगों में पारंपरिक डीबीएमएस द्वारा प्रदान की जाने वाली सुविधाओं से अलग-अलग आवश्यकताएं हैं। अब अर्लंग भाषा में लागू किए गए एप्लिकेशन को व्यापक श्रेणी की सुविधाओं के मिश्रण की आवश्यकता होती है, जो आमतौर पर पारंपरिक DBMS द्वारा संतुष्ट नहीं होते हैं। Mnesia आवश्यकताओं को ध्यान में रखते हुए डिज़ाइन किया गया है:
तेजी से वास्तविक समय कुंजी / मूल्य की खोज
मुख्य रूप से संचालन और रखरखाव के लिए जटिल गैर-वास्तविक समय प्रश्न
वितरित अनुप्रयोगों के कारण वितरित डेटा
उच्च दोष सहिष्णुता
डायनामिक री-कॉन्फ़िगरेशन
जटिल वस्तुओं
Mnesia को अधिकांश अन्य DBMS के अलावा जो सेट करता है, वह यह है कि यह दूरसंचार अनुप्रयोगों की विशिष्ट डेटा प्रबंधन समस्याओं को ध्यान में रखकर बनाया गया है। इसलिए मेन्सिया पारंपरिक डेटाबेस में पाए जाने वाले कई अवधारणाओं को जोड़ती है, जैसे कि दूरसंचार अनुप्रयोगों के लिए डेटा प्रबंधन प्रणालियों में पाई जाने वाली अवधारणाओं के साथ लेनदेन और प्रश्न, जैसे कि बहुत तेज़ रीयल-टाइम ऑपरेशन, दोषपूर्ण सहिष्णुता के विन्यास योग्य डिग्री (प्रतिकृति के माध्यम से) और करने की क्षमता इसे रोकने या निलंबित किए बिना सिस्टम को फिर से कॉन्फ़िगर करें। Mnesia भी प्रोग्रामिंग भाषा Erlang के लिए इसके तंग युग्मन के कारण दिलचस्प है, इस प्रकार लगभग Erlang को एक डेटाबेस प्रोग्रामिंग भाषा में बदल दिया गया। इसके कई लाभ हैं, सबसे महत्वपूर्ण यह है कि DBMS द्वारा उपयोग किए जाने वाले डेटा प्रारूप और प्रोग्रामिंग भाषा द्वारा उपयोग किए जाने वाले डेटा प्रारूप के बीच प्रतिबाधा बेमेल है,
मानेसिया बनाम माईएसक्यूएल, प्रदर्शन :
आंतरिक माशिया का उपयोग करते समय कुछ * एसक्यूएल डेटाबेस का उपयोग करते समय ईज़बर्ड कम कम्प्यूटेशनल संसाधनों का उपभोग करता है। आप शायद उस विषय में रुचि रखते हैं जब आपके पास कई समवर्ती उपयोगकर्ता होते हैं (उदाहरण के लिए 1000 से अधिक)। कुछ समवर्ती उपयोगकर्ताओं के साथ ejabberd का CPU खपत नगण्य है, इसलिए छोटे सर्वर के व्यवस्थापक बाहरी SQL सर्वर और डेटाबेस को सेट करने की परवाह नहीं करते हैं।
काउचडी वी। मानेसिया, वी। माईक्यूएस और अन्य मनेसिया विषय :
एक अंतर्दृष्टि जो तुरंत ध्यान में आई, वह यह है कि जबकि यह मेरे लिए स्पष्ट रूप से स्पष्ट था कि कैसे MySQL के लिए डेटा की संरचना की जाए, यह मानेसिया के लिए कम है, और काउचबडी के लिए मैं अभी भी पूरी तरह से सर्वश्रेष्ठ दृष्टिकोण के बारे में सुनिश्चित नहीं हूं। अभी के लिए, यहाँ कुछ और अधिक स्पष्ट बिंदु दिए गए हैं:
एक 'रिकॉर्ड' में एक 'अंक' फ़ील्ड होता है जो स्पष्ट रूप से इंगित करता है कि इसे कितनी बार खेला गया है। MySQL में यह ठीक है, लेकिन अगर मैं इस क्षेत्र को CouchDB के लिए एक दस्तावेज़ में शामिल करता हूं तो मुझे डेटाबेस में दस्तावेज़ का एक पूर्ण डुप्लिकेट संशोधन हर बार मिल जाएगा, जो कि एक नंबर बदलता है, जो भयानक रूप से अक्षम लगता है।
रिकॉर्ड्स, टैग्स, और उनके बीच एक लिंक तालिका में तीन-तालिका लेआउट (देखें कि अगर यह स्पष्ट नहीं है तो स्क्रिप्ट देखें) कम से कम (स्पष्ट रूप से मेरे लिए) स्पष्ट रूप से सही समाधान है, लेकिन ऐसा करने के कई संभावित तरीके हैं Mnesia और CouchDB दोनों में और मुझे लगता है कि मेरे पास सहज जवाब नहीं हैं।
संक्षेप में, यह बहुत विशिष्ट उद्देश्य के लिए डिज़ाइन किया गया है और उद्देश्य के अनुरूप अच्छी तरह से इंजीनियर है। कोई भी डेटाबेस दूसरे की तुलना में सारगर्भित नहीं हो सकता। केवल आवश्यकताओं के उपयोग के माध्यम से ही कमेंसिटी के तत्वों को प्रेरित किया जा सकता है।
नहीं, मैं यह नहीं कहूंगा कि Mnesia बड़ी मात्रा में डेटा के लिए अच्छा है। आप बैक के रूप में Ets या Dets का उपयोग करना चुन सकते हैं । यदि आप Ets चुनते हैं, तो आपका डेटाबेस केवल-इन-मेमोरी और बहुत तेज़ होगा, लेकिन डेटा लगातार नहीं है। और यदि आप अपने डेटा को लगातार (डिस्क पर सहेजे गए) चाहते हैं, तो आपको Dets का उपयोग करने की आवश्यकता है, जिसमें 2GB की सीमा है, इसलिए आपका डेटाबेस 2GB से अधिक डेटा नहीं रख सकता है।
आप एक कस्टम बैकएंड उदाहरण के लिए innostore का उपयोग कर सकते हैं जो Riak NoSQL डेटाबेस में उपयोग किया जाता है ।
Mnesia के साथ लाभ यह है कि यह एक वितरित डेटाबेस है, इसलिए यदि आपके पास एक से अधिक कंप्यूटर हैं, तो यह गलत सहिष्णु प्रणालियों को करना बहुत आसान है। और एर्लैंग में उपयोग करना बहुत आसान है क्योंकि यह एक इन-लैंग्वेज डेटाबेस है और "एक फ़ंक्शन की तरह" कार्य करता है। और यह सुपर-फास्ट भी है अगर आपको केवल कैश की तरह इन-मेमोरी डेटाबेस की आवश्यकता है।