मैं विभिन्न स्थितियों के लिए अधिकतम क्वेरी दक्षता के लिए आदर्श दस्तावेज़ संरचना के बारे में सोच रहा हूं और मैं इसके बारे में पूछना चाहता हूं। यह वास्तव में मेरे बारे में नहीं जानता है कि इस विशिष्ट प्रकार के मामले में मोंगोडीबी स्मृति में कैसे व्यवहार करता है। मुझे आपको एक काल्पनिक परिदृश्य दें।उपयोगकर्ता अनुयायियों/अनुयायियों की सबसे कुशल पूछताछ के लिए एक अच्छा मोंगोडीबी दस्तावेज़ संरचना क्या है?
अनुयायी और अनुयायियों की एक ट्विटर-शैली प्रणाली की कल्पना करें। एक बेशक सरसरी नज़र के बाद, मुख्य विकल्प दिखाई देते हैं:
प्रत्येक उपयोगकर्ता दस्तावेज़ में, एक "अनुयायियों" सरणी अन्य उपयोगकर्ताओं वे पालन के सभी दस्तावेजों के संदर्भों वाले। अन्य उपयोगकर्ताओं के "user.followers" सरणी में हमारे वर्तमान उपयोगकर्ता को ढूंढकर अनुयायी पाए जाते हैं। मुख्य नकारात्मक पक्ष अनुवर्ती खोज के संभावित प्रश्न ओवरहेड प्रतीत होता है। इसके अलावा, विशेष रूप से "user.followers" की सामग्री के लिए एक क्वेरी के लिए, क्या मोंगोडीबी केवल उपयोगकर्ताओं के दस्तावेज़ों में आवश्यक फ़ील्ड तक पहुंचता है, या पूरे उपयोगकर्ता दस्तावेज़ को मिला है और फिर आवश्यक फ़ील्ड मान वहां से देखे गए हैं और यह कैश/इस तरह से संग्रहित किया गया है कि एक बड़े उपयोगकर्ता आधार पर एक क्वेरी को और अधिक स्मृति की आवश्यकता होगी?
प्रत्येक उपयोगकर्ता दस्तावेज़ में, प्रत्येक के लिए त्वरित पहुंच के लिए "अनुयायियों" और "अनुयायियों" दोनों को संग्रहीत करना। यह स्पष्ट रूप से डुप्लिकेट डेटा का नकारात्मक अर्थ है कि उपयोगकर्ता ए के लिए एक प्रविष्टि निम्नलिखित उपयोगकर्ता में संबंधित उपयोगकर्ता बी में दोनों उपयोगकर्ता दस्तावेज़ों में मौजूद है, और हटाने से दूसरे में एक मिलान हटाना आवश्यक है। तकनीकी रूप से, यह एक साधारण हटाने के लिए संभावित विफलता के बिंदुओं की संख्या दोगुना करने पर विचार कर सकता है। और क्या मोंगोडीबी अभी भी जो कुछ मैंने सुना है, उससे हटा हुआ है जब इसे हटाए जाने पर स्मृति के संग्रहीत डेटा के "स्विस चीजिंग" के रूप में वर्णित किया गया है, और इसलिए 2 मेमोरी के बजाय 2 फ़ील्ड से निकालने के लिए उस मेमोरी होल की समस्या का असर होता है?
उपयोगकर्ताओं के अनुयायियों को संग्रहीत करने के लिए एक अलग संग्रह, उपयोगकर्ता दस्तावेजों के लिए समान रूप से पूछे जाने वाले एक-दूसरे के साथ पूछे गए- सिवाय इसके कि स्पष्ट रूप से केवल एक ही डेटा का उपयोग किया जा रहा है अनुयायी है ताकि उपयोगकर्ता दस्तावेज़ों में बहुत से अन्य डेटा प्रासंगिक हो प्रत्येक उपयोगकर्ता, हम उस डेटा तक पहुंचने से बचते हैं। ऐसा लगता है कि एक रिलेशनल डेटाबेस में कुछ ऐसा लगता है, हालांकि मुझे पता है कि यह हमेशा सिद्धांत पर एक भयानक दृष्टिकोण नहीं है, जाहिर है कि यदि किसी अन्य दृष्टिकोण में से एक (या जिसे मैंने नहीं माना है) में से एक मोंगो के वास्तुकला के तहत बेहतर है। सीखना पसंद है!
किसी को भी इस पर कोई विचार है, या मुझे बताने की मैं एक बहुत ही प्रासंगिक और और स्पष्ट डॉक्स पेज नहीं छूटा है कहीं न कहीं, या यहाँ तक कि मुझे बताने की कि मैं सिर्फ बेवकूफ जा रहा हूँ चाहता है चाहता है (साथ सोचा क्यों, कृपया एक स्पष्टीकरण;)) मुझे आपसे सुनना अच्छा लगेगा!
आप किस प्रोग्रामिंग भाषा का उपयोग करेंगे? इसके आधार पर कुछ विशेषताएं हैं जो अंतर्निहित ड्राइवर समर्थन कर सकते हैं या नहीं। मैं विशेष रूप से डीबीआरएफ के बारे में बात कर रहा हूं। http://docs.mongodb.org/manual/applications/database-references/ –
यह एक अच्छा मुद्दा है, धन्यवाद। हम कुछ भी इस्तेमाल कर सकते हैं लेकिन वर्तमान में PHP और Node.js. का मिश्रण – tdous