python - how to get the n-th record of a datastore query -
मान लीजिए कि मेरे पास GAE मॉडल है और यह क्वेरी:
query = Foo.all ( ) .डर ('- कुंजी ')
मुझे एन-वें रिकॉर्ड प्राप्त करना है। इसे हासिल करने का सबसे कारगर तरीका क्या है?
क्या समाधान संपत्ति को अनन्य नहीं है, जैसे नीचे दिए गए हैं:
query = Foo.all ()। आदेश ('- रंग ')
संपादित करें: n> 1000
संपादन 2: मैं एक दोस्ताना पेजिंग तंत्र विकसित करना चाहता हूं जो उपलब्ध पृष्ठ दिखाता है (जैसे पृष्ठ 1, पृष्ठ 2, ... पृष्ठ 185) और क्वेरी स्ट्रिंग में एक "? Page = x" की आवश्यकता है, बजाय "? बुकमार्क = XXX" जब पृष्ठ = x, तो उस पृष्ठ के प्रथम अभिलेख से शुरू होने वाले रिकॉर्ड को लाने के लिए क्वेरी है।
ऐसा करने का कोई कारगर तरीका नहीं है - किसी भी डीबीएमएस में हर मामले में, आपको कम से कम इंडेक्स रिकॉर्ड्स के माध्यम से अनुक्रमिक रूप से पढ़ना होगा जब तक कि आप नें एक खोज न करें, तब संबंधित डेटा रिकॉर्ड देखें। यह अधिक या कम है जो GAE में (गणना, ऑफ़सेट) करता है, 1000 रिकॉर्डों की अतिरिक्त सीमा के साथ।
इसका बेहतर तरीका एक 'बुकमार्क' रखना है, जिसमें मूल्य का जिस फ़ील्ड को आप पुनः प्राप्त अंतिम संस्था के लिए आदेश दे रहे हैं, और इकाई की कुंजी फिर, जब आप जहां से छोड़ दिया गया था, तब से आप जारी रखना चाहते हैं, आप असमानता क्वेरी की निचली सीमा के रूप में फ़ील्ड के मान को जोड़ सकते हैं, और अभिलेखों को छोड़ दें, जब तक कि आप पिछले एक से मेल नहीं खाते या उससे अधिक हो जाएं।
यदि आप उपयोगकर्ताओं के लिए 'मैत्रीपूर्ण' पृष्ठ ऑफ़सेट प्रदान करना चाहते हैं, आप शुरूआती ऑफसेट और बुकमार्क्स (क्रम-प्रॉपर्टी, कुंजी) ट्यूपल के बीच एक संघ को संगृहीत करने के लिए memcache का उपयोग करने के लिए क्या कर सकते हैं। जब आप एक पृष्ठ बनाते हैं, तो पिछले एक के बाद इकाई के लिए बुकमार्क डालें या अपडेट करें। जब आप किसी पृष्ठ को प्राप्त करते हैं, तो बुकमार्क का उपयोग करें, अगर मौजूद है, या ऑफसेट के साथ क्वेरी करके, इसे कठिन तरीके से जेनरेट करें - संभावित एकाधिक क्वेरीज़ यदि ऑफ़सेट पर्याप्त उच्च है।
Comments
Post a Comment