2014-08-29 7 views
6

मैं समझता हूं कि दस्तावेज़ डेटाबेस में जॉइन या तो संभव नहीं हैं या फंसे हुए हैं। मैं एक रिलेशनल डेटाबेस पृष्ठभूमि से आ रहा हूं और इस तरह के परिदृश्यों को संभालने के तरीके को समझने की कोशिश कर रहा हूं।जॉइन के बिना, दस्तावेज़ डेटाबेस में डेटा को संभालने का सही तरीका क्या है?

मान लें कि मेरे पास एक कर्मचारी संग्रह है जहां मैं सभी कर्मचारी संबंधित जानकारी संग्रहीत करता हूं।

{ 
    "id": 444, 
    "projectName": "My Construction Project", 
    "projectType": "Construction", 
    "projectTeam":[ 
     { "_id": 2345, "position": "Engineer" }, 
     { "_id": 1234, "position": "Project Manager" } 
    ] 
} 

मैं एक सूची प्रदान करना चाहते हैं:, मैं एक अलग प्रोजेक्ट संग्रह जहाँ मैं परियोजना डाटा स्टोर है कि उस तरह दिखता है

{ 
    "id": 1234, 
    "firstName": "John", 
    "lastName": "Smith", 
    "gender": "Male", 
    "dateOfBirth": "3/21/1967", 
    "emailAddresses":[ 
     { "email": "[email protected]", "isPrimary": "true" }, 
     { "email": "[email protected]", "isPrimary": "false" } 
    ] 
} 

यह भी मान लें: निम्नलिखित एक ठेठ कर्मचारी दस्तावेज है प्रोजेक्ट टीमों के साथ मेरी सभी परियोजनाओं में से, मैं यह सुनिश्चित करने में कैसे संभाल सकता हूं कि मैं टीम में व्यक्तियों यानी पूर्ण नाम, ईमेल पते इत्यादि के बारे में सभी प्रासंगिक जानकारी वापस कर दूं?

क्या यह दो अलग-अलग प्रश्न हैं? परियोजनाओं के लिए एक और दूसरा उन लोगों के लिए जिनकी आईडी परियोजनाओं के संग्रह में दिखाई देती है?

यदि हां, तो मैं लोगों के बारे में डेटा कैसे कहूं, जैसे पूरे नाम, ईमेल पते? क्या मैं डेटा को अपडेट करने के लिए अपने ऐप में फ़ोरैच लूप करता हूं?

यदि मैं सभी प्रासंगिक डेटा को पॉप्युलेट करने के लिए अपने आवेदन पर निर्भर हूं, तो यह एक प्रदर्शन हिट नहीं है जो मोंगोडीबी जैसे दस्तावेज़ डेटाबेस के प्रदर्शन लाभों को ऑफ़सेट करेगा?

आपकी मदद के लिए धन्यवाद।

उत्तर

7

"... कैसे मुझे यकीन है कि मैं टीम में व्यक्तियों अर्थात पूर्ण नाम, ईमेल पते, आदि के बारे में सभी प्रासंगिक जानकारी वापसी कर रही निपटेंगे? यह दो अलग-अलग क्वेरी है?"

यह या तो 2 अलग-अलग प्रश्न हैं या आप प्रोजेक्ट दस्तावेज़ में denormalize। हमारे आवेदनों में हम दूसरी क्वेरी करते हैं और दस्तावेजों में डेटा को यथासंभव सामान्यीकृत रखते हैं।

वास्तव में कहीं भी "_id" कुंजी को देखने के लिए आम नहीं है लेकिन शीर्ष-स्तर दस्तावेज़ पर। इसके अलावा, संग्रहों के लिए जिनके पास लाखों दस्तावेज हैं, आप कुंजी को "terse" रखकर भंडारण को सहेजते हैं। "प्रोजेक्टनाम" की बजाय "नाम" पर विचार करें, "प्रोजेक्ट टाइप" की बजाय "टाइप", "स्थिति" के बजाय "pos" पर विचार करें। यह मामूली लगता है लेकिन यह जोड़ता है। आप "team.empId" पर एक इंडेक्स भी डालना चाहते हैं, इसलिए क्वेरी "जो औसत पर काम करती है" पर कितनी परियोजनाएं चलती हैं "अच्छी तरह से चलती है। करने के लिए है कि आप पूरे दस्तावेज़ हर बार जब आप एक व्यक्ति क्षेत्र अद्यतन करने के लिए या, कहते हैं, टीम के लिए एक नए सदस्य को जोड़ने चाहते हैं लिखने के लिए की जरूरत नहीं है कि

{ 
    "_id": 444, 
    "name": "My Construction Project", 
    "type": "Construction", 
    "team":[ 
    { "empId": 2345, "pos": "Engineer" }, 
    { "empId": 1234, "pos": "Project Manager" } 
    ] 
} 

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

db.projects.update(
    { _id : 444 }, 
    { $addToSet : "team" : { "empId": 666, "position": "Minion" } } 
); 

एक चीज प्राप्त करने के लिए 2 प्रश्न पहले दर्द होता है, लेकिन आप इसे पीछे छोड़ देंगे।

+0

बहुत बहुत धन्यवाद! – Sam

0

मोंगो डीबी एक दस्तावेज़ संग्रहण डेटाबेस है। यह उच्च उपलब्धता, और मापनीयता का समर्थन करता है।

मेरी समझ के अनुसार परियोजना टीम (विवरण), के साथ अपनी सभी परियोजनाओं की एक सूची लौटने के लिए, आपको 2 प्रश्नों को चलाने होंगे। MongoDB के बाद से FK कमी हम कार्यक्रम के स्तर पर इसे बनाए रखने की जरूरत है नहीं है,। एफके बाधाओं के बजाय, 1) यदि डेटा कम है, तो हम डेटा को उप दस्तावेज़ के रूप में एम्बेड कर सकते हैं। 2) डीओबी डिजाइन करने के सामान्य तरीके के बजाय, मोंगोडीबी में हमें पहुंच पैटर्न के अनुसार डिजाइन करने की आवश्यकता है। यानी जिस तरह से हमें डेटा की अधिक संभावना पूछने की आवश्यकता है। (हालांकि अद्यतन के लिए समय अधिक (धीमी) है, लेकिन उपयोगकर्ता के अंत में प्रदर्शन मुख्य रूप से पढ़ने की गतिविधि पर निर्भर करता है, जो आरडीबीएमएस से बेहतर होगा)

निम्न लिंक मुंगो डीबी पर निःशुल्क प्रमाणपत्र प्रदान करता है। Mongo DB University उनके पास एक मंच भी है, जो बहुत अच्छा है।

संबंधित मुद्दे