जब mysql पर mongodb जैसे एक nosql डेटाबेस का उपयोग करें?


13

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

मैं '' इस उपयोगकर्ता द्वारा पोस्ट की गई सभी टिप्पणियों को ढूँढता हूँ '', '' सभी तस्वीरें खोजें जो किसी अल्बम इकाई से संबंधित हों '' आदि के रूप में क्वेरी को कुछ सरल करूँगा।

क्या nosql सिस्टम स्थैतिक संबंधपरक डेटा-मॉडल से दूर जाते हैं लेकिन फिर भी आपको ऐसे संदर्भों पर नज़र रखने देते हैं, क्या विदेशी कुंजियों के अनुरूप कुछ है जो आप प्रश्नों में उपयोग कर सकते हैं?

जवाबों:


19

सामान्य उपयोग

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

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

  • यदि आप एक अखंड सर्वर होने के बजाय कई सर्वरों पर अपने डेटा को क्लस्टर करने से लाभ प्राप्त करना चाहते हैं, जो आमतौर पर RDBMS द्वारा आवश्यक है।

  • भंडारित करता है। यहां तक ​​कि अगर आप अपने मुख्य डेटाबेस के रूप में एक आरडीबीएमएस के साथ रहना चाहते हैं, तो यह क्वेरी परिणामों को काउंट करने या डेटा रखने के लिए NoSQL डेटाबेस का उपयोग करने के लिए उपयोगी हो सकता है, जैसे काउंटर।

  • दस्तावेजों को जमा करना। यदि आप सुसंगत दस्तावेजों को संग्रहीत करना चाहते हैं, तो डेटाबेस में कुछ NoSQL डेटाबेस (जैसे MongoDB) वास्तव में उन लोगों को संग्रहित करने में विशेष हैं।

जॉइन के बारे में क्या?

ईमानदारी से कहूं तो, कोई भी सम्मिलित चीज मुझे शुरुआत में बहुत डरावनी नहीं लगी। लेकिन चाल SQL में सोच को रोकने के लिए है। आपको वास्तव में उस ऑब्जेक्ट के साथ सोचना होगा जो आपके पास स्मृति में है जब आप अपना एप्लिकेशन चला रहे हों। वे कम या ज्यादा सिर्फ NoSQL डेटाबेस में बचाया जाना चाहिए क्योंकि वे क्षेत्र।

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

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

आगे पढ़ने के लिए मैं वास्तव में मार्टिन फाउलर की सलाह देता हूं ।


2

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


2
क्या? ... क्यों? ...
रॉबर्ट हार्वे

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

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

0

कुछ मामलों में, आपको विदेशी कुंजी की आवश्यकता नहीं होगी। उदाहरण के लिए:

इस उपयोगकर्ता द्वारा पोस्ट की गई सभी टिप्पणियाँ खोजें

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

लेकिन कुछ परिस्थितियों में, इससे डेटा दोहराव हो सकता है , इसलिए एक से दूसरे दस्तावेज़ को जोड़ना उपयुक्त हो सकता है। इस मामले में, आप MongoDB सामान्यीकरण, विदेशी कुंजी और शामिल होने , डेटाबेस संदर्भ पृष्ठ और विशेष रूप से DBRefs सुविधा से दिलचस्पी ले सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.