2010-04-16 17 views
8

डेटा संग्रह में 10000 ऑब्जेक्ट्स के संग्रह से 2000-2010 आइटम चुनने वाले प्रश्न को लिखने के बारे में कोई कैसे जाएगा।Google ऐप इंजन और पेजिंग

मुझे पता है कि यह GQL में इस तरह किया जा सकता है:

select * from MyObject limit 10 offset 2000 

documentation के अनुसार, जब एक offset का उपयोग कर इंजन अभी भी सभी पंक्तियों लायेगा, केवल उन्हें वापस नहीं है, इस प्रकार क्वेरी बनाने ऐसे तरीके से प्रदर्शन करें जो offset के मान के साथ रैखिक रूप से मेल खाते हैं।

क्या कोई बेहतर तरीका है? जैसे कि छद्म ROWNUM कॉलम का उपयोग करने जैसे किसी अन्य प्रकार के डेटा स्टोर में किया जा सकता है।

उत्तर

6

परिणामों को कैश करने के अलावा ऑफ़सेट का उपयोग करके कुशलतापूर्वक पृष्ठ का कोई तरीका नहीं है। हालांकि, आप 'बुकमार्क' प्रकार दृष्टिकोण का उपयोग करके पेजिंग को लागू करने के लिए datastore cursors का उपयोग कर सकते हैं।

+0

कूल, बहुत बहुत शुक्रिया: यहाँ एक अधिक पूर्ण उदाहरण है। –

2

कर्सर का उपयोग करने के अलावा आप एक सॉर्ट ऑर्डर दृष्टिकोण का भी उपयोग कर सकते हैं। उदाहरण के लिए:

SELECT * FROM MyObject ORDER BY field LIMIT 10; 
पहले 10 वस्तुओं के लिए अगले 10 वस्तुओं के लिए

और फिर, आदि

SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10; 

फील्ड भले ही आप एक और उपयुक्त क्षेत्र की जरूरत नहीं है एक महत्वपूर्ण हो सकता है।

http://code.google.com/appengine/articles/paging.html