क्या यह NoSQL डेटाबेस के साथ काम करते समय गलत तरीका माना जाएगा? क्या मुझे NoSQL के साथ काम करते समय 'रिलेशनशिप' के संदर्भ में नहीं सोचना चाहिए?
एम्बेडिंग के मामले में बहुत सारे प्रश्न हैं और यह बहुत कम हो जाता है।
Somethings कि यहाँ विचार करने की आवश्यकता है कि उल्लेख नहीं किया गया है, तो आप एम्बेड करना चाहते हैं:
- दस्तावेज़ का आकार बड़े पैमाने पर बढ़ रही हो जाएगा? यदि ऐसा है तो दस्तावेज़ अक्सर डिस्क पर स्थानांतरित हो सकता है, यह एक बुरी बात है।
- क्या संबंधित पंक्ति में संग्रह में शामिल होने वाले कई लोग शामिल होंगे (यानी
video
user
एम्बेड नहीं कर सकते हैं)। अगर ऐसा होता है तो संबंधित पंक्ति से उप-दस्तावेज में अनावश्यक डेटा की प्रतिलिपि बनाते समय आपको समस्याएं मिल सकती हैं, खासकर उस अनावश्यक डेटा को अपडेट करने पर।
- मुझे इन परिणामों को प्रदर्शित करने की आवश्यकता कैसे होगी?
परिणाम प्रदर्शित करना हमेशा एम्बेड करना है या नहीं, यह एक महत्वपूर्ण निर्णय है। यदि आपको पंक्तियों की एक बड़ी संख्या को पगने की आवश्यकता है, तो 1000 कहें, आपको $slice
ऑपरेटर को सामान्य क्वेरीिंग या समेकन ढांचे में उपयोग करने की आवश्यकता होगी। 1000 में मैं मानता हूं कि यह काफी तेज हो सकता है लेकिन जल्द या बाद में कि इन-मेमोरी ऑपरेशन सामान्य पूछताछ से धीमा हो जाएगा (वास्तव में यह हमेशा होना चाहिए)।
आप जटिल छंटाई और की आवश्यकता होती है सहायक दस्तावेज़ों आप इन बाहर विभाजित करना चाहते हैं हो सकता है की प्रदर्शित करने और बजाय दस्तावेज़ संरचना है:
{
"string": "foobar",
"owners": [
ObjectId(),
ObjectId(),
ObjectId()
]
}
मुझे लगता है कि यह वास्तव में के बाद से अपने डेटा के लिए वैसे भी एक अधिक performant संरचना हो सकता है owner
संग्रह में user
पंक्ति की तरह लगता है।
उपयोगकर्ता के संभावित डेटा के साथ उप-दस्तावेज़ों को पॉप्युलेट करने के बजाय आप केवल _id
का संदर्भ दे सकते हैं। यह सुंदर कुल है क्योंकि आप रिश्ते को एम्बेड कर सकते हैं लेकिन साथ ही दस्तावेज़ बहुत ही कम हो जाएगा, जो उम्मीद है कि निरंतर डिस्क आंदोलन का कम मौका है, न कि केवल एक छोटा काम करने वाला सेट समग्र रूप से अधिक प्रदर्शन करने वाला ऑपरेशन बना रहा है। इतना ही नहीं, लेकिन निश्चित रूप से _id
किसी मालिक का शायद ही कभी बदलना है, इसलिए डेटा के इस सबसेट पर फेंकने के लिए आपको केवल एक ही ऑपरेशन की आवश्यकता होगी और हटाएं।
जटिल सॉर्टिंग और पेजिनेशन पर वापस आना। इस डेटा के साथ आप निश्चित रूप से एक ही दौर यात्रा के साथ सभी owner
आईडी प्राप्त कर सकते हैं और फिर एक और राउंड ट्रिप में आप users
तालिका के भीतर $in
का उपयोग करके सामान्य क्वेरीिंग के साथ उन मालिकों की पंक्तियों के लिए क्वेरी कर सकते हैं जो आपको आवश्यक जटिल प्रदर्शन की अनुमति देते हैं।
तो कुल मिलाकर यह संरचना, मैंने पाया है, बहुत ही प्रभावशाली है।
बेशक यह संरचना आपकी पूछताछ पर निर्भर करती है, इसके बजाय उपयोगकर्ता पर स्ट्रिंग आईडी को घर बनाना बेहतर हो सकता है लेकिन इस मामले में ऐसा नहीं होता है क्योंकि उपयोगकर्ता संभवतः कई तारों का मालिक बन सकता है जैसे कि मैं कहूंगा कि यह एक है कई-> स्ट्रिंग पक्ष पर एम्बेडेड कई रिश्ते।
उम्मीद है कि इस मदद करता है और मैं हलकों में दौर आगे नहीं जा सके,
कृपया छतरी के रूप में "नोएसक्यूएल" का उपयोग न करें। आप MongoDB का उपयोग कर रहे हैं। बस।"नोएसक्यूएल" का अर्थ है * बहुत अधिक और बहुत छोटा * :-) –