कर्सर-आधारित पेजिनेशन क्या है?
स्क्रैपलेस स्क्रैपिंग ब्राउज़र ब्राउज़र सत्रों को पृष्ठ इंटरैक्शन के बीच बनाए रखता है ताकि डेटा वर्कफ़्लो कर्सर-चालित, लोड-और-और, और अनंत-स्क्रॉल स्थितियों का पालन कर सकें।
TL;DR
- कर्सर-आधारित पेजिनेशन एक क्रमबद्ध परिणाम सेट को पृष्ठों में बांटता है और क्लाइंट को एक अपारदर्शी निरंतरता मान देता है जो उस क्रम में एक स्थिति का प्रतिनिधित्व करता है। एक सामान्य प्रतिक्रिया में आइटम की एक सरणी, अगला कर्सर, पिछला कर्सर, या पृष्ठ-जानकारी के फ़ील्ड जैसे hasNextPage शामिल होते हैं।
- एक स्थिर क्रम स्थापित करें। सर्वर परिणामों को एक या अधिक फ़ील्ड द्वारा क्रमित करता है और एक अद्वितीय टाईब्रेक जोड़ता है। क्रम दिशा, फ़िल्टर और दायरा यात्रा अनुबंध का हिस्सा बनाते हैं और क्लाइंट द्वारा पृष्ठों को चलाने के दौरान अपरिवर्तित रहना चाहिए।
- टोकन अपरिवर्तित रखें। अगली अनुरोध में निर्दिष्ट पैरामीटर में सटीक टोकन शामिल होता है। सर्वर इसे मान्य करता है, प्रासंगिक सीमा को बहाल करता है, और अगले टुकड़े का चयन करने से पहले समान फ़िल्टर और क्रम लागू करता है।
- फ़िल्टर, खाता दायरा, क्रम के फ़ील्ड और दिशा को एक यात्रा में अपरिवर्तित रखें। दोहराए गए पृष्ठ आमतौर पर दर्शाते हैं कि क्लाइंट गलत टोकन भेज रहा है, एक फ़िल्टर को छोड़ रहा है, या एक पुरानी निरंतरता लिंक का पालन कर रहा है।
- कर्सर-आधारित पेजिनेशन संख्यात्मक स्थिति को एक सर्वर-निर्धारित निरंतरता सीमा से बदलता है।
परिभाषा और संक्षिप्त उत्तर
कर्सर-आधारित पेजिनेशन एक क्रमबद्ध परिणाम सेट को पृष्ठों में बांटता है और क्लाइंट को एक अपारदर्शी निरंतरता मान देता है जो उस क्रम में एक स्थिति का प्रतिनिधित्व करता है। क्लाइंट अगले या पिछले टुकड़े का अनुरोध करने के लिए लौटाए गए कर्सर को भेजता है। एक पृष्ठ संख्या के विपरीत, कर्सर एक मानव-सामने वाला स्थान नहीं है जैसे पृष्ठ पांच। यह सर्वर-निर्धारित स्थिति है, जो अक्सर अंतिम रिकॉर्ड के क्रम के मानों, एक स्नैपशॉट मार्कर, या एक एन्कोडेड टोकन से ली जाती है जो सेवा को कुशलता से जारी रखने देती है।
एक सामान्य प्रतिक्रिया में आइटम की एक सरणी, अगला कर्सर, पिछला कर्सर, या पृष्ठ-जानकारी के फ़ील्ड जैसे hasNextPage शामिल होते हैं। क्लाइंट को कर्सर को ठीक उसी तरह बनाए रखना चाहिए जैसे लौटाया गया था। कर्सर को डिकोड करना, संपादित करना, या संश्लेषण करना क्लाइंट को कार्यान्वयन विवरणों से जोड़ता है और जब सेवा अपने टोकन प्रारूप को बदलती है तो यह टूट सकता है। अगला कर्सर अनुपस्थित या स्पष्ट रूप से गलत अंत मार्कर का अभाव सामान्यत: दर्शाता है कि यात्रा समाप्त हो चुकी है।
कर्सर पेजिनेशन एक निर्धारक क्रम के साथ सबसे अच्छा काम करता है। केवल गैर-विशिष्ट फ़ील्ड जैसे निर्माण समय द्वारा क्रमबद्ध करना पृष्ठ सीमा पर रिकॉर्ड को बांध सकता है। एक स्थिर डिज़ाइन एक अद्वितीय टाईब्रेक जोड़ता है, आमतौर पर एक अपरिवर्तनीय पहचानकर्ता, ताकि हर रिकॉर्ड में कुल क्रम हो। निरंतरता की शर्त तब अंतिम टुपल के बाद रिकॉर्ड का चयन कर सकती है, जैसे दिए गए निर्माण समय और पहचानकर्ता से बाद के मान।
यह दृष्टिकोण विशेष रूप से फ़ीड और बदलती डेटा सेट के लिए उपयोगी है। गहरे पृष्ठों को डेटाबेस को हर पिछले पंक्ति को गिनने और त्यागने की आवश्यकता नहीं होती है, और वर्तमान स्थिति से पहले नए सम्मिलित रिकॉर्ड बाद के पृष्ठों को स्थानांतरित करने की संभावना कम होती है। फिर भी, कर्सर पेजिनेशन एक स्थिर स्नैपशॉट स्वचालित रूप से नहीं बनाता है। हटाने, क्रम के फ़ील्ड में संशोधन, और कर्सर सीमा के बाहर के परिवर्तन अभी भी क्लाइंट द्वारा देखे जाने वाले प्रभाव डाल सकते हैं जब तक कि API स्नैपशॉट विवेचनाओं को दस्तावेज नहीं करता है।
एक क्रमबद्ध सेट के माध्यम से कर्सर कैसे आगे बढ़ता है
- एक स्थिर क्रम स्थापित करें। सर्वर परिणामों को एक या अधिक फ़ील्ड द्वारा क्रमित करता है और एक अद्वितीय टाईब्रेक जोड़ता है। क्रम दिशा, फ़िल्टर और दायरा यात्रा अनुबंध का हिस्सा बनाते हैं और क्लाइंट द्वारा पृष्ठों को चलाने के दौरान अपरिवर्तित रहना चाहिए।
- पहला पृष्ठ और टोकन लौटाएं। प्रारंभिक अनुरोध में कर्सर को छोड़ दिया जाता है या एक प्रलेखित प्रारंभिक मान का उपयोग किया जाता है। सर्वर एक सीमित आइटम सेट और एक अपारदर्शी टोकन लौटाता है जो अंतिम आइटम के बाद निरंतरता सीमा का प्रतिनिधित्व करता है।
- टोकन अपरिवर्तित रखें। अगली अनुरोध में निर्दिष्ट पैरामीटर में सटीक टोकन शामिल होता है। सर्वर इसे मान्य करता है, प्रासंगिक सीमा को बहाल करता है, और अगले टुकड़े का चयन करने से पहले समान फ़िल्टर और क्रम लागू करता है।
- स्पष्ट अंतिम संकेत पर रुकें। यात्रा तब समाप्त होती है जब अगला कर्सर अनुपस्थित, शून्य, या एक अंत ध्वज के साथ जोड़ा गया होता है। क्लाइंट को स्थिर रिकॉर्ड पहचान द्वारा भी डुप्लिकेट हटाना चाहिए और विकृत या दोहराते टोकनों के लिए एक सीमित पृष्ठ गार्ड रखना चाहिए।
वास्तविक प्रणालियों में कर्सर-आधारित पेजिनेशन
गतिविधि फ़ीड
नए कार्यक्रम स्टेबल सीमा पर आ सकते हैं जबकि एक पाठक सत्र के नीचे पृष्ठ संख्याएँ स्थानांतरित किए बिना जारी रहता है।
बड़े API संग्रह
कीसेट-शैली क्वेरीज़ क्रमबद्ध मानों से आगे बढ़ सकती हैं बजाय कि गहरे संख्यात्मक ऑफसेट के माध्यम से स्कैन करने के।
अनंत स्क्रॉल
उपयोगकर्ता इंटरफ़ेस प्रत्येक बैच को जोड़ सकता है और सेवा के अंत की रिपोर्ट तक अगला कर्सर मेमोरी में रख सकता है।
डेटा संग्रह
एक क्रॉलर कर्सर को अंतिम कमिट किए गए बैच के बगल में चेकपॉइंट कर सकता है और जानबूझकर रोकने के बाद ज्ञात निरंतरता राज्य से फिर से शुरू कर सकता है।
कर्सर फ़ील्ड आप सामान्यतः सामना करते हैं
एक साइड-बाय-साइड दृश्य निकटतम अवधारणाओं को स्वैप करने से रोकता है। बदली में पहचानें कि कौन सा अनुबंध सक्रिय है इससे पहले कि क्लाइंट या सर्वर व्यवहार को बदला जाए।
| संभावना या संकेत | अर्थ | क्रियात्मक नोट |
|---|---|---|
| अगला_कर्सर | अगली पृष्ठ के लिए अपारदर्शी टोकन | सटीक रूप से संग्रहीत करें; अनुपस्थित होने पर रोकें |
| पूर्व_कर्सर | पिछले पृष्ठ के लिए अपारदर्शी टोकन | समर्थित होने पर द्वि-दिशात्मक नेविगेशन के लिए उपयोगी |
| अगला_पृष्ठ_है | बूलियन समाप्ति संकेत | प्राप्त कर्सर के साथ उपयोग करें, कर्सर प्रतिस्थापना के रूप में नहीं |
| अंतिम_कर्सर | अंतिम एज से संबंधित सीमा | ग्राफक्यूएल कनेक्शन प्रतिक्रियाओं में सामान्य |
| पृष्ठ_आकार या पहला | अधिकतम अनुरोधित आईटम | सेवा अभी भी कम संख्या में आइटम वापस कर सकती है |
कर्सर-आधारित पृष्ठांकन निदान और संचालन डिजाइन
दोहराए गए पृष्ठ आमतौर पर इसका अर्थ होता है कि क्लाइंट गलत टोकन भेज रहा है, एक फ़िल्टर छोड़ रहा है, या एक पुरानी निरंतरता लिंक का पालन कर रहा है। जब टोकन संवेदनशील स्थिति हो सकती है, तो प्रत्येक कर्सर का हैश लॉग करें न कि पूर्ण मूल्य। प्रत्येक पृष्ठ में पहले और अंतिम स्थिर रिकॉर्ड पहचानकर्ताओं को रिकॉर्ड करें। यदि टोकन बदलता है लेकिन आइटम सीमाएँ नहीं बदलती हैं, तो सर्वर के क्रम और टाई हैंडलिंग का निरीक्षण करें।
मिसिंग रिकॉर्ड अक्सर तब दिखाई देते हैं जब क्रम अस्थिर होता है या एक परिवर्तनीय फ़ील्ड कर्सर का हिस्सा होता है। एक रिकॉर्ड जिसका स्कोर या अपडेट समय बदलता है, यात्रा के दौरान वर्तमान सीमा के पार जा सकता है। जितना संभव हो उतना अपरिवर्तनीय क्रम का उपयोग करें, एक अनूठा टाई-ब्रेकर जोड़ें, और प्रलेखित करें कि क्या एपीआई स्नैपशॉट स्थिरता का वादा करता है या केवल लाइव संग्रह पर आगे की प्रगति।
एक ब्राउज़र-चालित पृष्ठ कर्सर को एक आंतरिक नेटवर्क प्रतिक्रिया में छुपा सकता है न कि दृश्य URL में। पृष्ठ के फेच या ग्राफक्यूएल ट्रैफ़िक, लोड-और-लाए नियंत्रण, और एप्लिकेशन स्थिति का निरीक्षण करें। जब टोकन कुकीज़ या सत्र स्थिति के साथ बंधा होता है, तो वही ब्राउज़र सत्र बनाए रखें, और प्राप्त टोकन को अपारदर्शी समझें भले ही यह बेस64 या पठनीय JSON जैसा दिखता हो।
कर्सर-आधारित पृष्ठांकन कार्यान्वयन चेकलिस्ट
नीचे दी गई चेकलिस्ट इस अवधारणा को सत्यापित इंजीनियरिंग कार्य में बदल देती है। केवल उन वस्तुओं को लागू करें जो सक्रिय प्रोटोकॉल और उत्पाद अनुबंध से मेल खाती हैं, लेकिन सबूतों को एक साथ रखें ताकि कोई अन्य इंजीनियर निर्णय को फिर से बना सके।
- एक यात्रा के दौरान फ़िल्टर, खाता दायरा, क्रम फ़ील्ड और दिशा को अपरिवर्तित रखें।
- प्रत्येक निरंतरता टोकन को सटीक रूप से लौटाए अनुसार संग्रहीत करें और इससे पृष्ठ संख्या निकालने से बचें।
- पृष्ठ स्थिति के बजाय एक टिकाऊ रिकॉर्ड पहचानकर्ता द्वारा आउटपुट को डीडुप्लिकेट करें।
- संबंधित बैच सफलतापूर्वक प्रतिबद्ध होने के बाद ही कर्सर का चेकपॉइंट करें।
- प्रलेखित समाप्ति संकेत पर रुकें और अप्रत्याशित चक्रों के लिए एक सीमित पृष्ठ सुरक्षा जोड़ें।
- पृष्ठ सीमाओं और कर्सर हैश को लॉग करें ताकि दोहराए गए या छोड़े गए खंडों की जांच की जा सके।
- स्नैपशॉट व्यवहार का दावा करने से पहले पृष्ठ सीमाओं पर सम्मिलित, हटाने और क्रम-फ़ील्ड परिवर्तन का परीक्षण करें।
कार्यान्वयन के बाद, सामान्य व्यवहार, सीमाएँ, विकृत इनपुट, गायब स्थिति, समवर्ती गतिविधि, और एक नियंत्रित वातावरण में जानबूझकर पहुँच इनकार का परीक्षण करें। प्रत्येक मामले के लिए अपेक्षित स्थिति, शरीर का आकार, अंत की स्थिति और स्थिति संक्रमण को रिकॉर्ड करें। उत्पादन निगरानी को उसी आयामों को रिपोर्ट करना चाहिए जो परीक्षण के दौरान उपयोग किए गए ताकि एक घटना की तुलना ज्ञात बासeline किया जा सके।
प्रलेखन को इंटरफ़ेस के प्रत्येक पक्ष पर जिम्मेदारी का नाम देना चाहिए। ग्राहकों को आवश्यक फ़ील्ड, स्थिर पहचानकर्ता, आदेश नियम, सीमाएँ, टर्मिनल संकेत, और त्रुटि अर्थ की आवश्यकता होती है। ऑपरेटरों को आंतरिक नीति, भंडारण या मार्गनिर्देशन निर्णय, अवलोकनीयता फ़ील्ड, और सुरक्षित सार्वजनिक प्रतिक्रियाओं की आवश्यकता होती है। अस्पष्ट अनुबंध टीमों को गलत परत में दिखाई देने वाले लक्षण को ठीक करने के लिए मजबूर करते हैं।
कर्सर-आधारित पृष्ठांकन के साथ सामान्य गलतियाँ
किसी एक फ़ील्ड से सफलता, अनुपस्थिति, अनुमति, क्रम, या पूर्णता का अनुमान न करें बिना चारों ओर के अनुबंध। स्थिति कोड, टोकन, पृष्ठ आकार और परिवहन हेडर प्रत्येक सीमित प्रश्न का उत्तर देते हैं। प्रतिक्रिया शरीर, विधि, पहचान, फ़िल्टर, प्रोटोकॉल संस्करण, और सर्वर डोक्यूमेंटेशन बाकी अर्थ प्रदान करती है।
सादगी के नाम पर Diagnostic संदर्भ को न हटाएं। एक छोटा लॉग लाइन जो अनुरोध पहचानकर्ता, लक्ष्य, संस्करण, दायरा, या सीमा को छोड़ देता है, एक छोटे दोष को अनुमान के घंटों में बदल सकता है। उसी समय, अवलोकनीयता को क्रेडेंशियल्स, सत्र रहस्यों, साइन किए गए URLs और संवेदनशील पेलोड फ़ील्ड को चुराना चाहिए।
एक अस्थायी संचालन समाधान को स्थायी अनुबंध में न बदलें। अंतर्निहित क्रम, अनुमति, मार्गनिर्देशन, गति, फ्रेमिंग, या त्रुटि-मैपिंग मुद्दे को ठीक करें और एक प्रतिकृति चेक जोड़ें। एक प्रणाली तब भरोसेमंद बन जाती है जब विफलता स्पष्ट और सीमित होती है, न कि जब एक मैन्युअल रन पूर्ण होने का संयोग होता है।
निष्कर्ष
कर्सर-आधारित पृष्ठांकन संख्यात्मक स्थिति को सर्वर-परिभाषित निरंतरता सीमा के साथ बदलता है। इसकी ताकत स्थिर आदेश, अनुक्रमित निरंतरता क्वेरी, अपारदर्शी टोकन, और स्पष्ट समाप्ति संकेत से आती है। ग्राहक सफल होते हैं जब वे कर्सर को अपरिवर्तित बनाए रखते हैं, यात्रा पैरामीटर को स्थिर रखते हैं, केवल प्रतिबद्ध पृष्ठों का चेकपॉइंट करते हैं, और जीवित डेटा पर आगे की प्रगति को एक गारंटीकृत स्नैपशॉट से अलग करते हैं।
क्या आप एक अधिक विश्वसनीय डेटा कार्यप्रवाह बनाने के लिए तैयार हैं?
इस गाइड में प्रोटोकॉल अवधारणाओं को एक प्रलेखित स्क्रेपलेस उत्पाद सतह से जोड़ें और प्रत्येक अनुरोध को प्रस्तुत से परिणाम तक मापने योग्य रखें।
आज साइन अप करें और प्राप्त करें $5 मुफ्त क्रेडिट — कोई क्रेडिट कार्ड की आवश्यकता नहीं.
अपने $5 क्रेडिट का दावा करें →अक्सर पूछे जाने वाले प्रश्न
क्या कर्सर हमेशा एक डेटाबेस रिकॉर्ड आईडी है?
नहीं। एक कर्सर कई क्रम मूल्यों, एक स्नैपशॉट मार्कर, खाता दायरा, या सर्वर-साइड स्थिति को एन्कोड कर सकता है। ग्राहकों को इसे अपारदर्शी मानना चाहिए और केवल एपीआई के प्रलेखित अनुरोध और प्रतिक्रिया फ़ील्ड पर निर्भर रहना चाहिए।
क्या कर्सर पृष्ठांकन सीधे पृष्ठ 50 पर कूद सकता है?
आमतौर पर नहीं। कर्सर पृष्ठांकन क्रमिक निरंतरता के लिए डिज़ाइन किया गया है, इसलिए एक दूरस्थ स्थिति तक पहुँचने के लिए एक पूर्व प्रतिक्रिया से कर्सर या एक अलग खोज सीमा की आवश्यकता होती है। संख्यात्मक यादृच्छिक पहुँच एक ऐसा क्षेत्र है जहाँ ऑफसेट पृष्ठांकन सरल होता है।
क्या कर्सर पृष्ठांकन डुप्लिकेट को रोकता है?
नहीं। स्थिरOrdering पृष्ठ शिफ्टिंग को कम करता है, लेकिन लाइव अपडेट, परिवर्तनीय क्रम फ़ील्ड और सेवा व्यवहार अभी भी ओवरलैप उत्पन्न कर सकते हैं। क्लाइंट को स्थिर रिकॉर्ड पहचान से डुप्लीकेट को हटाना और पृष्ठ सीमा की निगरानी करनी चाहिए।
क्या एक क्लाइंट को एक कर्सर को डिकोड करना चाहिए?
एक क्लाइंट को डिकोड किए गए कर्सर सामग्री पर निर्भर नहीं होना चाहिए जब तक कि एपीआई स्पष्ट रूप से प्रारूप को सार्वजनिक के रूप में परिभाषित नहीं करता। एक स्पष्ट रूप से पठनीय टोकन बिना नोटिस के बदल सकता है, एक हस्ताक्षर शामिल कर सकता है, या ऐसी स्थिति हो सकती है जिसे संशोधित नहीं किया जाना चाहिए।
एक क्रॉलर को कर्सर पृष्ठांकन को कैसे फिर से शुरू करना चाहिए?
कर्सर को अचल बैच सीमा, फ़िल्टर, क्रम ऑर्डर और दायरे के साथ बनाए रखें। केवल वही यात्रा करने के पैरामीटर के साथ फिर से शुरू करें, और डुप्लीकेशन और ऑडिट के लिए स्थिर रिकॉर्ड पहचानकर्ताओं को बनाए रखें।