कॉस्मॉस डीबी कॉन्टिनेशन टोकन कैसे काम करता है?
पहली नजर में, यह स्पष्ट है कि कॉसमॉस DB में निरंतरता टोकन क्या करता है: इसे अगली क्वेरी में संलग्न करने से आपको परिणामों का अगला सेट प्राप्त होता है। लेकिन "परिणामों के अगले सेट" का क्या मतलब है?
क्या इसका मतलब यह कि:
- परिणामों के अगले सेट के रूप में अगर मूल क्वेरी को बहुत पहले क्वेरी के समय पेजिंग के बिना पूरी तरह से निष्पादित किया गया था (दस्तावेजों की उपयुक्त संख्या को छोड़ते हुए)?
- परिणामों के अगले सेट के रूप में अगर मूल क्वेरी को अब निष्पादित किया गया था (दस्तावेजों की उचित संख्या को छोड़ते हुए)?
- कुछ पूरी तरह से अलग?
उत्तर 1. बेहतर प्रतीत होता है लेकिन यह देखते हुए कि सर्वर को असीमित मात्रा में स्टोर करने की आवश्यकता होगी। लेकिन उत्तर 2 भी समस्याग्रस्त है क्योंकि इससे असंगतता हो सकती है, उदाहरण के लिए एक ही दस्तावेज़ को पृष्ठों पर कई बार परोसा जा सकता है, अगर पृष्ठ के प्रश्नों के बीच अंतर्निहित डेटा बदल गया है।
जवाब
कॉस्मॉस डीबी क्वेरी निष्पादन सर्वर साइड पर स्टेटलेस हैं। निरंतरता टोकन का उपयोग सूचकांक की स्थिति को फिर से बनाने और निष्पादन की प्रगति को ट्रैक करने के लिए किया जाता है।
"परिणामों का अगला सेट" का अर्थ है, क्वेरी को पिछले निष्पादन से एक "बुकमार्क" से फिर से निष्पादित किया जाता है। यह बुकमार्क निरंतरता टोकन द्वारा प्रदान किया जाता है।
- निरंतरता के दौरान बनाए गए दस्तावेज़
सम्मिलित किए जाने और क्वेरी निष्पादित होने की स्थिति के आधार पर उन्हें वापस किया जा सकता है या नहीं।
उदाहरण:
C.someValue ASC द्वारा c ORDER से * सेलेक्ट करें
मान लें कि बुकमार्क में कुछ वैल्यू = 10 था, क्वेरी इंजन एक निरंतरता टोकन का उपयोग करके प्रसंस्करण फिर से शुरू करता है, जहां someValue = 10।
यदि आप क्वेरी निष्पादन के बीच someValue = 5 के साथ एक नया दस्तावेज़ सम्मिलित करना चाहते थे, तो यह परिणामों के अगले सेट में दिखाई नहीं देगा ।
यदि नया दस्तावेज़ "पृष्ठ" यानी बुकमार्क में डाला गया है, तो यह अगले परिणामों के परिणाम में दिखाई देगा
- निरंतरता के दौरान अद्यतन किए गए दस्तावेज़
उपरोक्त तर्क भी अपडेट पर लागू होते हैं (# 4 देखें)
- जारी रखने के दौरान हटाए गए दस्तावेज़
वे परिणामों के अगले सेट में दिखाई नहीं देंगे ।
- डुप्लिकेट की संभावना
नीचे दिए गए प्रश्न के मामले में,
C.remainingInventory ASC द्वारा c ORDER से * सेलेक्ट करें
यदि परिणाम के पहले सेट के बाद शेष इन्वेंट्री को अपडेट किया गया था और अब यह दूसरे पृष्ठ के लिए ORDER BY मानदंडों को संतुष्ट करता है, तो दस्तावेज़ फिर से दिखाई देगा ।
कॉस्मॉस DB क्वेरी पृष्ठों में स्नैपशॉट अलगाव प्रदान नहीं करता है। हालांकि, उत्पाद टीम के अनुसार यह एक अविश्वसनीय रूप से असामान्य परिदृश्य है क्योंकि निरंतरता पर प्रश्न बहुत जल्दी हैं और ज्यादातर मामलों में सभी क्वेरी परिणाम पहले पृष्ठ पर वापस आ जाते हैं।
प्रारंभिक प्रयोगों के आधार पर, उत्तर विकल्प # 2, या अधिक सटीक प्रतीत होता है:
- पहले पृष्ठ की सेवा के बाद बनाए गए दस्तावेज़ बाद के पृष्ठों पर देखने योग्य हैं
- पहले पृष्ठ की सेवा के बाद अद्यतन किए गए दस्तावेज़ बाद के पृष्ठों पर देखने योग्य हैं
- पहले पृष्ठ की सेवा के बाद हटाए गए दस्तावेज़ बाद के पृष्ठों पर छोड़ दिए जाते हैं
- दस्तावेज़ कभी भी दो बार नहीं दिए जाते हैं
एमएसएफटी ( सीएफ कल्याण के उत्तर) से जानकारी के विपरीत पहला बयान । कॉसमॉस डीबी टीम से अधिक योग्य उत्तर प्राप्त करना बहुत अच्छा होगा, जो पृष्ठों को पुनः प्राप्त करने के शब्दार्थ को निर्दिष्ट करता है। यूआई में डेटा प्रदर्शित करने के लिए यह बहुत महत्वपूर्ण नहीं हो सकता है, लेकिन बैकएंड में डेटा प्रोसेसिंग के लिए आवश्यक हो सकता है, यह देखते हुए कि क्वेरी करते समय पेजिंग को अक्षम करने का कोई तरीका प्रतीत नहीं होता है ( cf.) क्या लेन-देन संबंधी प्रश्न संभव हैं कॉस्मॉस डीबी? )।
प्रयोगात्मक विधि
मैंने 5 दस्तावेजों के साथ एक संग्रह को क्वेरी करने के लिए सच्चा ब्रुटिन के कॉस्मॉस डीबी एक्सप्लोरर का उपयोग किया , क्योंकि यह उपकरण पृष्ठ आकार और अन्य अनुरोध विकल्पों के साथ खेलने की अनुमति देता है।
पृष्ठ का आकार 1 पर सेट किया गया था, और क्रॉस विभाजन क्वेरीज़ को सक्षम किया गया था। विभिन्न प्रश्नों की कोशिश की गई, जैसे SELECT * FROM c
या SELECT * FROM c ORDER BY c.name
।
पृष्ठ 1 को पुनः प्राप्त करने के बाद, नए दस्तावेज़ सम्मिलित किए गए थे, और कुछ मौजूदा दस्तावेज़ों (बाद के पृष्ठों पर दिखाई देने वाले दस्तावेज़ों सहित) को अद्यतन और हटा दिया गया था। फिर बाद के सभी पृष्ठों को अनुक्रम में पुनर्प्राप्त किया गया।
(उपकरण के स्रोत कोड पर एक त्वरित नज़र की पुष्टि की जाती है जो ResponseContinuationTokenLimitInKb
सेट नहीं है।)