mysql MongoDB या अन्य दस्तावेज़ उन्मुख डेटाबेस सिस्टम का उपयोग कब करें?




(9)

हम वीडियो- और ऑडियो-क्लिप, फोटो और वेक्टर-ग्राफिक्स के लिए एक मंच प्रदान करते हैं। हमने MySQL के साथ डेटाबेस बैकएंड के रूप में शुरुआत की और हाल ही में फ़ाइलों की सभी मेटा-सूचना संग्रहीत करने के लिए MongoDB को शामिल किया, क्योंकि मोंगोडीबी बेहतर आवश्यकताओं को फिट करता है। उदाहरण के लिए: फ़ोटो में Exif जानकारी हो सकती है, वीडियो में ऑडियो-ट्रैक हो सकते हैं जहां हम मेटा-सूचना भी स्टोर करना चाहते हैं। वीडियो और वेक्टर-ग्राफिक्स किसी भी सामान्य मेटा-सूचना को साझा नहीं करते हैं, इसलिए मुझे पता है कि मोंगोडीबी इस असंगठित डेटा को स्टोर करने और इसे खोजने योग्य रखने के लिए सही है।

हालांकि, हम अपने मंच को विकसित करना और सुविधाओं को जोड़ना जारी रखते हैं। अब अगले कदमों में से एक हमारे उपयोगकर्ताओं के लिए एक मंच प्रदान करेगा। अब सवाल उठता है: MySQL डेटाबेस का उपयोग करें, जो फ़ोरम और फ़ोरम-पोस्ट आदि संग्रहीत करने के लिए एक अच्छा विकल्प होगा या इसके लिए मोंगोडीबी का भी उपयोग करेगा?

तो सवाल यह है कि: मोंगोडीबी का उपयोग कब करें और आरडीबीएमएस का उपयोग कब करें। यदि आप पसंद करते हैं और आप इसे क्यों लेते हैं, तो आप क्या करेंगे, mongoDB या MySQL,


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

यह एक ऐसा क्षेत्र है जहां मुझे लगता है कि मोंगोडीबी फिट बैठता है, लेकिन सामान्य रूप से MySQL / PostgreSQL की अधिक अनुशंसा की जाती है। वेब पर बहुत सारे दस्तावेज और डेवलपर संसाधन हैं, साथ ही उनकी कार्यक्षमता और मजबूती भी हैं।


एक सामाजिक ऐप के लिए मोंगो डीबी का उपयोग करने के दो साल बाद, मैंने देखा है कि एसक्यूएल आरडीबीएमएस के बिना जीने का वास्तव में क्या मतलब है।

  1. आप अलग-अलग तालिकाओं / संग्रहों से डेटा में शामिल होने जैसी चीजों को करने के लिए नौकरियां लिखना समाप्त करते हैं, जो कुछ आरडीबीएमएस स्वचालित रूप से आपके लिए करता है।
  2. NoSQL के साथ आपकी क्वेरी क्षमताओं को काफी हद तक अपंग कर दिया गया है। मोंगो डीबी एसक्यूएल के सबसे नज़दीकी चीज हो सकता है लेकिन यह अभी भी बहुत पीछे है। मुझ पर विश्वास करो। एसक्यूएल प्रश्न सुपर सहज, लचीला और शक्तिशाली हैं। MongoDb प्रश्न नहीं हैं।
  3. MongoDb प्रश्न केवल एक संग्रह से डेटा पुनर्प्राप्त कर सकते हैं और केवल एक अनुक्रमणिका का लाभ उठा सकते हैं। और MongoDb शायद सबसे लचीला NoSQL डेटाबेस में से एक है। कई परिदृश्यों में, इसका मतलब है संबंधित रिकॉर्ड खोजने के लिए सर्वर के लिए अधिक राउंड-ट्रिप। और फिर आप डेटा को डी-सामान्य करना शुरू करते हैं - जिसका अर्थ है पृष्ठभूमि नौकरियां।
  4. तथ्य यह है कि यह एक रिलेशनल डेटाबेस नहीं है, इसका मतलब है कि आपके पास यह सुनिश्चित करने के लिए विदेशी डेटा बाधाएं नहीं हैं (कुछ खराब प्रदर्शन करने के लिए सोचा जाता है) कि आपका डेटा सुसंगत है। मैं आपको आश्वासन देता हूं कि यह अंततः आपके डेटाबेस में डेटा विसंगतियों को बनाने जा रहा है। तैयार रहो। सबसे अधिक संभावना है कि आप अपने डेटाबेस को सुसंगत रखने के लिए प्रक्रियाओं या जांच लिखना शुरू कर देंगे, जो शायद आरडीबीएमएस को आपके लिए ऐसा करने से बेहतर प्रदर्शन नहीं करेगा।
  5. हाइबरनेट जैसे परिपक्व ढांचे के बारे में भूल जाओ।

मेरा मानना ​​है कि सभी परियोजनाओं में से 98% संभवतः एसएसएलक्यूएल की तुलना में एक सामान्य एसक्यूएल आरडीबीएमएस के साथ बेहतर तरीके से बेहतर हैं।


मोंगो को पसंद करना क्यों चाहेंगे 2 मुख्य कारण हैं

  • स्कीमा डिज़ाइन में लचीलापन (जेएसओएन प्रकार दस्तावेज़ स्टोर)।
  • स्केलेबिलिटी - बस नोड्स जोड़ें और यह क्षैतिज रूप से काफी अच्छी तरह से स्केल कर सकते हैं।

यह बड़े डेटा अनुप्रयोगों के लिए उपयुक्त है। आरडीबीएमएस बड़े डेटा के लिए अच्छा नहीं है।


इस असंगठित डेटा को स्टोर करने के लिए

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

और इन डेटाबेस का कार्यान्वयन नियमित आरडीबीएमएस से सरल है। चूंकि ये सरल कुंजी-मूल्यवान या दस्तावेज़ शैली बाइनरी ऑब्जेक्ट्स सीधे डिस्क में क्रमबद्ध होते हैं। ये डेटा स्टोर एसीआईडी ​​गुणों और किसी भी स्कीमा को लागू नहीं करते हैं। यह कोई लेनदेन क्षमताओं प्रदान नहीं करता है। तो यह बड़ा हो सकता है और हम तेजी से पहुंच प्राप्त कर सकते हैं (पढ़ने और लिखने दोनों)।

लेकिन इसके विपरीत, आरडीबीएम डेटा पर एसीआईडी ​​और स्कीमा लागू करता है। यदि आप संरचित डेटा के साथ काम करना चाहते हैं तो आप आरडीबीएम के साथ आगे बढ़ सकते हैं।

मैं इस तरह की चीजों के लिए मंच बनाने के लिए MySQL का चयन करूंगा। क्योंकि यह बड़े पैमाने पर नहीं जा रहा है। और यह एक बहुत ही सरल (सामान्य) अनुप्रयोग है जिसमें डेटा के बीच संरचित संबंध हैं।


आप जानते हैं, इन सभी चीजों में शामिल होने और 'जटिल लेन-देन' के बारे में - लेकिन यह मॉन्टी खुद था, जिसने कई साल पहले COMMIT / रोलबैक के लिए "ज़रूरत" को समझाया और कहा कि 'तर्क वर्गों में जो कुछ किया गया है, (और डेटाबेस नहीं) वैसे भी '- तो यह फिर से एक ही बात है। वेब ऐप्स के 99% के लिए क्या आवश्यक है एक गूंगा लेकिन अविश्वसनीय रूप से साफ और तेज़ डेटा स्टोरेज / पुनर्प्राप्ति इंजन है।


जैसा कि पहले कहा गया था, आप कई विकल्पों के बीच चयन कर सकते हैं, उन सभी विकल्पों पर नज़र डालें: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

मेरा सुझाव है कि आपका सबसे अच्छा संयोजन ढूंढना है: MySQL + Memcache वास्तव में बहुत अच्छा है यदि आपको एसीआईडी ​​की आवश्यकता है और आप कुछ टेबल में शामिल होना चाहते हैं MongoDB + Redis दस्तावेज़ स्टोर के लिए बिल्कुल सही है Neo4J ग्राफ डेटाबेस के लिए बिल्कुल सही है

मैं क्या करता हूं: मैं MySQl + Memcache से शुरू करता हूं क्योंकि मैं इसका उपयोग करता हूं, फिर मैं अन्य डेटाबेस ढांचे का उपयोग शुरू करता हूं। एक प्रोजेक्ट में, आप उदाहरण के लिए MySQL और MongoDB को जोड़ सकते हैं!


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


वितरित, sharded मंचों की जरूरत कौन है? हो सकता है कि फेसबुक, लेकिन जब तक आप एक फेसबुक-प्रतियोगी नहीं बना रहे हैं, तो बस माइस्क्ल, पोस्टग्रेस या जो भी आप सबसे अधिक आरामदायक हैं उसका उपयोग करें। यदि आप मोंगोडीबी को आजमा सकते हैं, तो ठीक है, लेकिन यह आपके लिए जादू करने की अपेक्षा न करें। इसमें सबकुछ और सामान्य नास्टनेस होगा, जैसा कि बाकी सब कुछ है, क्योंकि मुझे यकीन है कि आप पहले ही खोज चुके हैं कि आप वास्तव में पहले से ही इस पर काम कर रहे हैं।

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

व्यक्तिगत रूप से, मुझे लगता है कि "nosql" विखंडन से सूख जाएगा और मर जाएगा, क्योंकि कोई निर्धारित मानक नहीं है (लगभग परिभाषा के अनुसार)। तो मैं किसी भी लंबी अवधि की परियोजनाओं के लिए व्यक्तिगत रूप से इस पर शर्त नहीं लगाऊंगा।

केवल एक चीज जो मेरी पुस्तक में "nosql" को सहेज सकती है, यह है कि अगर यह रूबी या इसी तरह की भाषाओं में सहजता से एकीकृत हो सकती है, और भाषा को "लगातार" बना देती है, लगभग कोडिंग और डिज़ाइन में बिना किसी ओवरहेड के। ऐसा हो सकता है, लेकिन मैं तब तक इंतजार करूंगा, अभी नहीं, और इसे निश्चित रूप से परिपक्व होने की आवश्यकता है।

बीटीडब्ल्यू, आप स्क्रैच से फोरम क्यों बना रहे हैं? खुले स्रोत मंचों के बहुत सारे हैं जिन्हें अधिकांश आवश्यकताओं को पूरा करने के लिए tweaked किया जा सकता है, जब तक कि आप वास्तव में मंचों की अगली पीढ़ी (जो मुझे संदेह है) बना रहे हैं।


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

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





mongodb