एक-से-कुछ संबंध मौजूद है जहाँ संबंधित डेटा सीमित, छोटा है और अक्सर एक साथ पढ़ा जाता है।
→मुख्य दस्तावेज़ के भीतर संबंधित डेटा को एक नेस्टेड ऑब्जेक्ट या ऐरे के रूप में एम्बेड करें।
क्यों: एकल पॉइंट रीड में सभी आवश्यक डेटा को पुनः प्राप्त करके पढ़ने के प्रदर्शन को अनुकूलित करता है, RU लागत और विलंबता को कम करता है। क्लाइंट-साइड जॉइन से बचाता है।
संदर्भ↗
एक-से-कई संबंध जहाँ "कई" पक्ष असीमित रूप से बढ़ता है या "एक" पक्ष से स्वतंत्र रूप से अपडेट होता है।
→संबंधित वस्तुओं को अलग दस्तावेज़ों के रूप में संग्रहीत करें और पैरेंट दस्तावेज़ के ID का संदर्भ के रूप में उपयोग करें।
क्यों: दस्तावेज़ों को 2 MB आकार सीमा से अधिक होने से रोकता है और बड़े एम्बेडेड ऐरे पर अपडेट के लिए उच्च RU लागतों से बचाता है।
संदर्भ↗
एक दस्तावेज़ में एक ऐरे होता है जो समय के साथ असीमित रूप से बढ़ सकता है, जिससे 2 MB दस्तावेज़ आकार सीमा का जोखिम होता है (जैसे, इवेंट लॉग, टिप्पणियाँ)।
→ऐरे को कई "बकेट" दस्तावेज़ों में विभाजित करें। जब एक बकेट आकार/वस्तु सीमा तक पहुँच जाए, तो एक नया बनाएँ।
क्यों: संबंधित डेटा के तार्किक समूहन को बनाए रखते हुए व्यक्तिगत दस्तावेज़ों के आकार को प्रबंधनीय रखता है।
कई-से-कई संबंध को मॉडलिंग करना, जैसे छात्र और पाठ्यक्रम, या लेख और टैग।
→सीमित संबंधों के लिए, दोनों तरफ संबंध डेटा को डुप्लिकेट करें (जैसे, छात्र दस्तावेज़ में पाठ्यक्रम ID, पाठ्यक्रम दस्तावेज़ में छात्र ID को एम्बेड करें)। असीमित के लिए, एक अलग "जोड़" या "एज" दस्तावेज़ कंटेनर का उपयोग करें।
क्यों: डीनोर्मलाइज़ेशन जॉइन की आवश्यकता के बिना दोनों क्वेरी दिशाओं (पाठ्यक्रम में छात्र, छात्र के लिए पाठ्यक्रम) के लिए अनुकूलन करता है। एक जॉइन कंटेनर असीमित मामलों के लिए है।
पदानुक्रमित डेटा (जैसे, संगठनात्मक चार्ट, उत्पाद श्रेणियाँ) को मॉडलिंग करना और एक नोड के सभी वंशजों के लिए क्वेरी करने की आवश्यकता होना।
→प्रत्येक दस्तावेज़ में सभी पूर्वज ID या नामों (पथ) का एक ऐरे संग्रहीत करें।
क्यों: एकल `ARRAY_CONTAINS` फ़िल्टर के साथ कुशल सबट्री क्वेरीज़ को सक्षम करता है, जिससे महंगी रिकर्सिव लुकअप से बचा जा सके।
एक दस्तावेज़ में एक असीमित ऐरे होता है (जैसे, ब्लॉग टिप्पणियाँ), लेकिन सबसे आम क्वेरी को केवल सबसे हाल के N आइटम की आवश्यकता होती है।
→मुख्य दस्तावेज़ में हाल के आइटम का एक सबसेट एम्बेड करें और सभी आइटम को अलग संदर्भित दस्तावेज़ों के रूप में संग्रहीत करें।
क्यों: प्रदर्शन और लागत के लिए प्राथमिक रीड पाथ को अनुकूलित करता है, जबकि आवश्यकता पड़ने पर भी पूर्ण डेटासेट तक पहुंच की अनुमति देता है।
एक इकाई के लिए अपरिवर्तनीय घटनाओं के अनुक्रम को संग्रहीत करना और वर्तमान स्थिति या विश्लेषणात्मक एग्रीगेट्स के लिए क्वेरी करने की आवश्यकता होना।
→घटनाओं को एक एकल कंटेनर में संग्रहीत करें जिसे इकाई ID द्वारा पार्टीशन किया गया हो। मैटेरियलाइज़्ड व्यू या एग्रीगेट्स को कंप्यूट और स्टोर करने के लिए Change Feed या Synapse Link का उपयोग करें।
क्यों: एक पूर्ण ऑडिट ट्रेल प्रदान करता है और राइट मॉडल को विभिन्न रीड मॉडल से अलग करता है, जिससे उच्च लचीलापन मिलता है।
किसी विशिष्ट समय पर संबंधित डेटा की स्थिति को संरक्षित करने की आवश्यकता है (जैसे, एक ऑर्डर पर ग्राहक का पता)।
→दस्तावेज़ में संबंधित डेटा की एक प्रति (स्नैपशॉट) एम्बेड करें, बजाय इसके कि इसे संदर्भित करें।
क्यों: संदर्भित डेटा में भविष्य के परिवर्तनों से दस्तावेज़ को अलग करके ऐतिहासिक सटीकता सुनिश्चित करता है।
उच्च-आवृत्ति टाइम-सीरीज़ डेटा (जैसे, IoT सेंसर रीडिंग) को इन्जेस्ट करना और समय-सीमा पर डिवाइस द्वारा क्वेरी करना।
→डिवाइस ID को पार्टीशन कुंजी के रूप में उपयोग करें। प्रत्येक रीडिंग के लिए एक दस्तावेज़ के बजाय रीडिंग को समय-बकेटेड दस्तावेज़ों (जैसे, प्रति घंटा या प्रति मिनट) में एग्रीगेट करें।
क्यों: दस्तावेज़ गणना और राइट RU को नाटकीय रूप से कम करता है, जबकि एक पार्टीशन के भीतर कुशल समय-सीमा क्वेरीज़ के लिए डेटा को सह-स्थानित करता है।
एकल परमाणु ट्रांजेक्शन के रूप में कई क्रिएट, अपडेट या डिलीट ऑपरेशंस करने की आवश्यकता है।
→SDK की TransactionalBatch सुविधा का उपयोग करें। सभी ऑपरेशंस को एक ही तार्किक पार्टीशन कुंजी को लक्षित करना चाहिए।
क्यों: एकल पार्टीशन के भीतर 100 ऑपरेशंस तक के लिए ACID गारंटी प्रदान करता है, यह सुनिश्चित करता है कि या तो सभी ऑपरेशंस सफल होते हैं या सभी एक साथ विफल होते हैं।
दस्तावेज़ों को एक विशिष्ट अवधि (जैसे, 30 दिन) के बाद एक कंटेनर से स्वचालित रूप से हटा दिया जाना चाहिए।
→कंटेनर पर Time to Live (TTL) सक्षम करें और डिफ़ॉल्ट `ttl` मान सेकंड में सेट करें (जैसे, 30 दिनों के लिए 2592000)। एक व्यक्तिगत दस्तावेज़ पर -1 का `ttl` डिफ़ॉल्ट को ओवरराइड करता है और समाप्ति को रोकता है।
क्यों: TTL एक नो-कॉस्ट सुविधा है जो बैकग्राउंड डिलीट ऑपरेशंस करने के लिए बचे हुए RU का उपयोग करती है, जिससे डेटा जीवनचक्र को प्रबंधित करने का एक कुशल, हैंड्स-ऑफ तरीका मिलता है।
Cosmos DB मेटाडेटा से जुड़े बड़े बाइनरी ऑब्जेक्ट्स (छवियां, वीडियो, दस्तावेज़ > 2 MB) को संग्रहीत करने की आवश्यकता है।
→बाइनरी ऑब्जेक्ट को Azure Blob Storage में संग्रहीत करें। Blob के URI को Cosmos DB दस्तावेज़ में मेटाडेटा के साथ संग्रहीत करें।
क्यों: Cosmos DB संरचित मेटाडेटा के लिए अनुकूलित है और इसकी 2 MB दस्तावेज़ सीमा है। Blob Storage बड़े ऑब्जेक्ट स्टोरेज के लिए एक लागत प्रभावी और स्केलेबल सेवा है।