2011-11-21 7 views
6

मेरे पास एक मूल प्रश्न है कि मुझे एक मोंगो डीबी में अनुयायियों का संग्रह/निम्नलिखित कहां एम्बेड करना चाहिए। उपयोगकर्ता ऑब्जेक्ट में निम्नलिखित का एक एम्बेडेड संग्रह होना समझ में आता है, लेकिन क्या यह भी समझदार अनुयायियों के संग्रह को एम्बेड करने के लिए भी समझ में आता है? यही कारण है कि मैं अद्यतन और दोनों की प्रोफाइल रिकॉर्ड में एम्बेड करने के लिए होता है मतलब होगा: followee के एम्बेडेड सूची अनुयायी निम्नलिखित और फीड्स के मोंगो डीबी डिज़ाइन, मुझे कहां एम्बेड करना चाहिए?

  • में एम्बेडेड सूची निम्नलिखित और अनुयायियों

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

    क्या यह एक ऐसे संग्रह के लिए उम्मीदवार है जिसे एम्बेड नहीं किया जाना चाहिए? क्या मेरे पास सिर्फ किनारों का संग्रह होना चाहिए जहां मैं अनुयायी के साथ अपने संग्रह में निम्नलिखित स्टोर करता हूं और इसके बाद आईडी?

    अब अगर मुझे दोनों उपयोगकर्ताओं को फ़ीड या अपडेट करने के बाद भी फ़ीड अपडेट करना होगा, तो मुझे इसे कैसे व्यवस्थित करना चाहिए?

    उपयोग के मामले के रूप में, उपयोगकर्ता उन लोगों को देखेगा जो वे अपने फ़ीड देखने के दौरान अनुसरण कर रहे हैं, जो अक्सर होता है, और प्रोफ़ाइल के अनुयायियों को भी देखता है जब वे किसी के प्रोफाइल विवरण को देखते हैं, जो अक्सर होता है लेकिन पहले मामले के रूप में उतना ही नहीं। दोनों मामलों में, निम्नलिखित और अनुयायियों की कुल संख्या प्रत्येक प्रोफ़ाइल पृष्ठ पर दिखाई देती है।

  • उत्तर

    11

    सामान्य तौर पर, यह एक बुरा विचार निम्नलिखित/एम्बेड करने के लिए है का पालन-से उपयोगकर्ता दस्तावेज़ों में रिश्ते, कई कारणों से:

    (1) 16MB की एक अधिकतम दस्तावेज़ आकार सीमा नहीं है, और यह कि एक लोकप्रिय प्रशंसनीय है एक अच्छी तरह से सब्सक्राइब साइट के उपयोगकर्ता अधिकतम दस्तावेज़ आकार,

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

    तो, हां, दो क्षेत्रों वाले प्रत्येक रिकॉर्ड के अलग-अलग संग्रह में संबंधों के बाद निम्नलिखित/बाद में विभाजित करना सबसे अच्छा है, उदाहरण के लिए, {_id:, oid:}, _id पर इंडेक्स के साथ (जो " क्या मैं पीछा कर रहा हूं? "क्वेरी) और ओड (" मेरे पीछे कौन है? "क्वेरी के लिए)। किसी भी व्यक्तिगत स्थिति परिवर्तन को एक दस्तावेज़ के अतिरिक्त या हटाने के द्वारा मॉडलिंग किया जाता है, हालांकि यदि आप अनुयायी गणना जैसी चीजें प्रदर्शित कर रहे हैं, तो आपको शायद अलग काउंटर रखना चाहिए जो कि आप किसी भी किनारे सम्मिलन/हटाने के बाद अपडेट करते हैं।

    (बेशक, यह आपकी व्यावसायिक आवश्यकताओं का मानना ​​है कि आप स्थिरता विवरणों पर कुछ लचीलापन की अनुमति देते हैं: सामान्य रूप से, यदि आपका डिस्प्ले कोड उपयोगकर्ता को बताता है कि उसे 304 अनुयायियों को मिला है और फिर उन्हें गणना करने के लिए आगे बढ़ता है, तो केवल सबसे अधिक उग्र उपयोगकर्ता जांच करेगा कि अनुयायियों ने 304 तक की गणना की है। यदि व्यावसायिक आवश्यकताओं को पूर्ण स्थिरता की आवश्यकता है, तो आपको या तो डेटाबेस की आवश्यकता होगी जो आपके लिए लेन-देन को अलग करता है, अन्यथा आपको सभी उपयोगकर्ता पहचान प्रदर्शित करने के हिस्से के रूप में गिनती करना होगा।)

    +1

    प्रकृति में बहुत संबंधपरक होने के बावजूद, मैं पूरी तरह से आपकी व्याख्या से सहमत हूं।यह उन स्थानों में से एक है जहां संबंध पूर्ण ज्ञान देते हैं, और आप इस तरह प्रदर्शन दंड के साथ खत्म नहीं होते हैं। –

    +0

    क्या यह "पसंद" पर भी लागू होगा? मोंगो वेबसाइट पर मतदान उदाहरण दस्तावेज़ में पसंद को एम्बेड करता है लेकिन ऐसा लगता है कि पसंद के साथ-साथ निम्नलिखित के लिए तर्क की एक ही पंक्ति बनाई जा सकती है। – MonkeyBonkey

    +0

    @MonkeyBonkey - इस दृष्टिकोण को "पसंद" के लिए भी इस्तेमाल किया जा सकता है, लेकिन आप शायद इंडेक्स में से केवल 1 चाहते हैं। "पसंद" परिदृश्य के लिए इसे एम्बेड करने का लाभ यह है कि आप $ inc ऑपरेटर का उपयोग करके "पसंदकर्ता" की सटीक गणना बनाए रख सकते हैं। साथ ही, यह निश्चित रूप से साइट पर निर्भर करता है लेकिन # एक ऐसे व्यक्ति को जो एक ही पोस्ट पसंद करते हैं, उच्चतम ट्रैफिक उपयोगकर्ता के लिए अनुयायियों के # के समान स्तर तक पहुंचने की संभावना नहीं है, इसलिए सबसे खराब केस प्रदर्शन शायद कम महत्वपूर्ण है। – mpobrien

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