एक संबंधपरक डेटाबेस की तुलना में MongoDB जैसे स्कीमा मुक्त डेटाबेस का उपयोग करने के क्या फायदे हैं?


95

मुझे MySQL या PostgreSQL जैसे रिलेशनल डेटाबेस का उपयोग करने के लिए उपयोग किया जाता है, और MVC फ्रेमवर्क जैसे कि सिम्फनी, RoR या Django के साथ जोड़ा जाता है, और मुझे लगता है कि यह बहुत अच्छा काम करता है।

लेकिन हाल ही में मैंने MongoDB के बारे में बहुत कुछ सुना है जो एक गैर-संबंधपरक डेटाबेस है, या, आधिकारिक परिभाषा को उद्धृत करने के लिए ,

एक स्केलेबल, उच्च-प्रदर्शन, खुला स्रोत, स्कीमा-मुक्त, दस्तावेज़-उन्मुख डेटाबेस।

मैं वास्तव में किनारे पर होने में दिलचस्पी रखता हूं और अगले परियोजना के लिए मेरे पास मौजूद सभी विकल्पों के बारे में जानना चाहता हूं और वहां से सर्वश्रेष्ठ तकनीकों का चयन करता हूं।

MongoDB (या समान डेटाबेस) का उपयोग करने वाले मामलों में "क्लासिक" रिलेशनल डेटाबेस का उपयोग करने से बेहतर है? और सामान्य तौर पर MongoDB बनाम MySQL के क्या फायदे हैं? या कम से कम, यह इतना अलग क्यों है?

यदि आपके पास दस्तावेज़ीकरण और / या उदाहरण के संकेत हैं, तो यह बहुत मदद भी करेगा।

जवाबों:


57

यहाँ वेब अनुप्रयोगों के निर्माण के लिए MongoDB के कुछ फायदे हैं:

  1. दस्तावेज़-आधारित डेटा मॉडल। भंडारण की मूल इकाई JSON, पायथन डिक्शनरी, रूबी हैश आदि के अनुरूप है। यह एक समृद्ध डेटा संरचना है जो सरणियों और अन्य दस्तावेजों को रखने में सक्षम है। इसका मतलब है कि आप अक्सर एक एकल इकाई में एक निर्माण का प्रतिनिधित्व कर सकते हैं जिसके लिए एक रिलेशनल डीबी में ठीक से प्रतिनिधित्व करने के लिए कई तालिकाओं की आवश्यकता होगी। यदि आपका डेटा अपरिवर्तनीय है, तो यह विशेष रूप से उपयोगी है।
  2. गहरी क्वेरी-क्षमता। MongoDB दस्तावेज़-आधारित क्वेरी भाषा का उपयोग करते हुए दस्तावेज़ों पर गतिशील प्रश्नों का समर्थन करता है जो SQL के रूप में लगभग शक्तिशाली हैं।
  3. कोई स्कीमा माइग्रेशन नहीं। चूंकि MongoDB स्कीमा-मुक्त है, इसलिए आपका कोड आपके स्कीमा को परिभाषित करता है।
  4. क्षैतिज मापनीयता का एक स्पष्ट मार्ग।

आपको इसके बारे में अधिक पढ़ने और बेहतर विचार प्राप्त करने के लिए इसके साथ खेलने की आवश्यकता होगी। यहाँ एक ऑनलाइन डेमो है:

http://try.mongodb.org/


3
मैंने इस उत्तर को स्वीकार कर लिया, लेकिन अन्य अच्छे उत्तरों पर एक नज़र डालें। @marcgg ने उदाहरण के लिए दिलचस्प लिंक के साथ उत्तर दिया।
गिलियूम फ्लैंड्रे

"बेहतर प्रदर्शन" कहना भ्रामक है; यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं। जॉइनिंग का समर्थन नहीं करने वाले MongoDB इसे तेज नहीं बनाते हैं, इसका मतलब है कि यह साधारण DB ऑपरेशन में बेहतर है (माना जाता है कि, मैंने वास्तव में इसे साबित करने के लिए एक बेंचमार्क नहीं देखा है)। एक बार जब आपको कार्यक्षमता प्रदान करने की आवश्यकता होती है, तो मानगो के साथ आपका प्रदर्शन प्रभावित होगा। लेकिन अगर आपको जॉइन या रिलेशनल फीचर्स की जरूरत नहीं है, तो यकीन मानिए, मैंगो ज्यादा परफॉर्मेंट / स्केलेबल हो सकता है।
साशा चोडगोव

धन्यवाद @ शशिकेगोव मैं आपसे सहमत हुँ। 2010 की मुझे बहुत याद आ रही थी :)
काइल बैंकर

@ केलीबैंकर: कोई चिंता नहीं, अगर कोई इसे 2013 में देखता है तो गलत टिप्पणी करता है। :) संपादित करने के लिए +1।
साशा चोडगोव

मोंगो क्षैतिज मापनीयता का एक बहुत ही विशिष्ट मार्ग प्रदान करता है, जो विशिष्ट परिदृश्यों में उपयोगी है ....
AK_

23

इसके कई फायदे हैं।

उदाहरण के लिए आपका डेटाबेस स्कीमा अधिक स्केलेबल होगा, आपको माइग्रेशन के बारे में चिंता करने की आवश्यकता नहीं होगी, कोड लिखने के लिए अधिक सुखद होगा ... उदाहरण के लिए मेरे मॉडल के कोड में से एक:

class Setting
  include MongoMapper::Document

  key :news_search, String, :required => true
  key :is_availaible_for_iphone, :required => true, :default => false

  belongs_to :movie
end

एक कुंजी जोड़ना कोड की एक पंक्ति जोड़ रहा है!

ऐसे अन्य फायदे भी हैं जो लंबे समय में दिखाई देंगे, जैसे कि बेहतर स्केलेबिलिटी और गति।

... लेकिन ध्यान रखें कि गैर-संबंधपरक डेटाबेस रिलेशनल से बेहतर नहीं है । यदि आपके डेटाबेस में बहुत सारे संबंध और सामान्यीकरण हैं, तो MongoDB जैसी किसी चीज़ का उपयोग करने के लिए बहुत कम अर्थ हो सकता है। यह सब नौकरी के लिए सही उपकरण खोजने के बारे में है।

पढ़ने के लिए और अधिक चीजों के लिए मैं " क्यों मुझे लगता है कि मैंगो डेटाबेस के लिए है क्या रेल फ्रेमवर्क करने के लिए था " या mongodb वेबसाइट पर इस पोस्ट पर एक नज़र लेने की सिफारिश करेंगे । उत्तेजित होने के लिए और यदि आप फ्रेंच बोलते हैं, तो इस लेख पर एक नज़र डालें जिसमें बताया गया है कि स्क्रैच से MongoDB कैसे सेट करें।

संपादित करें: मैं आपको रयान द्वारा इस रेलकास्ट के बारे में बताना भूल गया । यह बहुत दिलचस्प है और आपको तुरंत शुरू करना चाहता है!


यह रेलकास्ट वास्तव में दिलचस्प लगता है; इस पर एक नज़र डालने के लिए, उम्मीद है कि मुझे यह समझने में बेहतर होगा कि यह कैसे काम करता है।
गिलोय फ़्लैंड्रे

5

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

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

कुछ लोगों को लगता है कि सकल नुकसान होगा, कुछ अन्य नहीं करेंगे।

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

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


1
यह वास्तव में एक विरोधी जवाब है। अधिकांश अर्थ, जैसा कि अधिकांश लोग इसे समझते हैं, केवल संबंधपरक अवधारणाओं से अधिक से उत्पन्न होता है। वास्तव में, अधिकांश एप्लिकेशन डेवलपर्स के लिए यह बेहद सामान्य है कि वे किसी डॉक्यूमेंट स्टोर के लिए सामान्यीकृत स्कीमा से बाहर निकलें।
user1020853

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

3
यह अर्थ का केवल एक दृश्य है और केवल एक बहुत ही संकीर्ण बौद्धिक संदर्भ में फिट बैठता है (और यह एक दार्शनिक है, तार्किक नहीं)। आपका जवाब मूल रूप से पढ़ता है "यदि आपके पास कोई स्कीमा नहीं है जैसे कि रिलेशनल डेटाबेस करता है, तो आपका कोई मतलब नहीं है।" शायद ही "क्या फायदे हैं?" की मूल क्वेरी का उत्तर है। इसलिए मैं इसे एक विरोधी जवाब कहता हूं। यह भी वास्तव में सच नहीं है जब तक कि हम "अर्थ" को इस संकीर्ण संदर्भ तक सीमित नहीं करते हैं जो आप से आ रहे हैं। "अच्छी तरह से स्थापित स्कीमा" के बिना "अर्थ" के लिए बहुत जगह है।
user1020853

1
तो कैसे आप के बारे में मुझे दिखाते हैं कि "अर्थ" के बारे में आपका "व्यापक" दृष्टिकोण कैसा है, और यह तर्क के विधेय या प्रस्ताव के बिना कैसे मौजूद हो सकता है। ध्यान दें कि मेरी टिप्पणी में एक बार "संबंधपरक" शब्द का उल्लेख नहीं किया गया था। पूर्व-संबंधपरक डेटा प्रौद्योगिकी में स्कीमा थे और इसलिए "अर्थ" का अनुमान लगाने के लिए उपयुक्त थे। प्री-डेटाबेस तकनीक में स्कीमा थे और इसलिए "अर्थ" का अनुमान लगाने के लिए उपयुक्त थे। स्कीमा-मुक्त में कोई स्कीमा नहीं है (जब तक कि "मुक्त" भाग एक सीधा झूठ नहीं है) और इसलिए "अर्थ" का अनुमान लगाने के लिए उपयुक्त नहीं है। ...
इरविन स्मॉर्ट

1
... स्कीमा-मुक्त अपने उपयोगकर्ताओं को एक अनुमान लगाने के खेल में मजबूर करता है। और भले ही वे उपयोगकर्ता इसे 90 या 99% सही समय पर प्राप्त करने का प्रबंधन कर सकें, यह अभी भी सिर्फ एक अनुमान लगाने का खेल है।
एरविन स्मॉर्ट

3

MongoDB को इस सप्ताह FLOSS साप्ताहिक में दिखाया गया था - http://twit.tv/floss105 एक समान अवधारणा का उपयोग करने वाला एक डेटाबेस CouchDB है जिसे दूसरे FLOSS साप्ताहिक पर चित्रित किया गया था: http://twit.tv/floss36

मुझे लगता है कि यह @marcgg द्वारा दिए गए लिंक के अलावा उन लोगों को सुनने के लायक है


3

मेरी परियोजनाओं में दोनों डेटाबेस के साथ काम करने के बाद पोस्टग्रेज और मोंगो के साथ मेरा अनुभव।

Postgres (RDBMS)

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

Postgres के साथ रहने का सबसे बड़ा फायदा यह है कि हमारे पास दोनों दुनिया के सर्वश्रेष्ठ हैं। हम JSONB में बाधाओं, स्थिरता और गति के साथ डेटा स्टोर कर सकते हैं। दूसरी ओर, हम अन्य प्रकार के डेटा के लिए सभी SQL सुविधाओं का उपयोग कर सकते हैं। अंतर्निहित इंजन बहुत स्थिर है और अच्छी मात्रा में डेटा वॉल्यूम के साथ अच्छी तरह से मुकाबला करता है। यह आपकी पसंद के हार्डवेयर और ऑपरेटिंग सिस्टम पर भी चलता है। फ़ील्ड लेनदेन पर बाधाओं के साथ JSON दस्तावेज़ों को संग्रहीत करते हुए, पूर्ण लेनदेन सहायता के साथ NoSQL क्षमताओं को प्रदान करने वाले पोस्टग्रेट्स।

पोस्टग्रेज के लिए सामान्य बाधाओं

स्केलिंग पोस्टग्रैज क्षैतिज रूप से काफी कठिन है, लेकिन उल्लेखनीय है।

पोस्टग्रेज के साथ फास्ट रीड ऑपरेशंस पूरी तरह से हासिल नहीं किए जा सकते हैं।

कोई SQL डेटा मामले

मानगो डीबी (वायर्ड टाइगर)

MongoDB "क्षैतिज पैमाने" के आयाम में पोस्टग्रेज को हरा सकता है। भंडारण JSON है जो मानगो को करने के लिए अनुकूलित है। Mongo अपने डेटा को BSONb नामक एक द्विआधारी प्रारूप में संग्रहीत करता है जो (मोटे तौर पर) JSON के एक सुपरसेट का सिर्फ एक द्विआधारी प्रतिनिधित्व है। MongoDB वस्तुओं को ठीक वैसे ही संग्रहीत करता है जैसे वे डिज़ाइन किए गए थे। MongoDB के अनुसार, लेखन-गहन अनुप्रयोगों के लिए, Mongo का कहना है कि नया इंजन (वायर्ड टाइगर) उपयोगकर्ताओं को लेखन प्रदर्शन में 10 गुना वृद्धि करने की अनुमति देता है (मुझे यह प्रयास करना चाहिए), भंडारण उपयोग में 80 प्रतिशत की कमी, भंडारण की कम लागत में मदद करता है। , हार्डवेयर का अधिक से अधिक उपयोग करें।

MongoDb की सामान्य अड़चनें

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

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


2

यह सभी व्यापार बंदों के बारे में है। MongoDB तेज़ है लेकिन ACID नहीं है, इसका कोई लेन-देन नहीं है। यह कुछ उपयोग के मामलों में MySQL से बेहतर है और दूसरों में बदतर है।


कृपया इस टिप्पणी की अब समीक्षा करें। MongoDb 4.0 अब एसिड लेनदेन का समर्थन करता है।
अनंत सिमरन सिंह

1

Bellow लाइनें MongoDB में लिखी गई हैं: निश्चित गाइड।

कई अच्छे कारण हैं:

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

0

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


1
आपके उत्तर में गलत धारणाएं हैं। जबकि MongoDB SQL इंजेक्शन के लिए असुरक्षित नहीं है, यह अधिक सामान्य रूप से इंजेक्शन के लिए अतिसंवेदनशील है। आप उस क्वेरी में मनमाने ढंग से जावास्क्रिप्ट को निर्दिष्ट कर सकते हैं जहाँ एक क्वेरी का खंड है। इसके अलावा, अन्य NoSQL विकल्प के विपरीत, MongoDB वास्तव में कुछ बहुत ही जटिल प्रश्न कर सकता है।
एमिली

पूर्वाग्रहों के लिए धन्यवाद। ध्यान दें, जैसा कि मैंने कहा, यह MongoDB साइट ही है जो संबंधपरक प्रश्नों पर प्रतिबंध लगाती है। जब तक मैंने कुछ और गलत नहीं समझा ...
फीलो

यह काफी संभावना है कि उन्होंने कहा कि MongoDB जटिल संबंधपरक प्रश्नों के लिए अनुपयुक्त है, लेकिन जटिल गैर-संबंधपरक प्रश्नों के लिए, यह काफी अच्छी तरह से अनुकूल है। कुछ कूल सामान आप कर सकते हैं के लिए mongodb.org/display/DOCS/Advanced+Queries पर एक नज़र डालें ।
एमिली

0
  1. MongoDB फ़ील्ड्स, नियमित अभिव्यक्ति खोजों द्वारा खोज का समर्थन करता है। उपयोगकर्ता परिभाषित जावा स्क्रिप्ट फ़ंक्शन को शामिल करता है।
  2. MongoDB को एक फाइल सिस्टम के रूप में इस्तेमाल किया जा सकता है, फाइलों के भंडारण के लिए कई मशीनों पर लोड संतुलन और डेटा प्रतिकृति सुविधाओं का लाभ उठाता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.