2011-01-20 19 views
9

का उपयोग करके पेजिनेशन तकनीकें मैं GAE (जावा) की कर्सर सुविधा का उपयोग करके अपनी वेबसाइट के लिए पृष्ठांकन को कार्यान्वित करना चाहता हूं। हालांकि, केवल एक आगे कर्सर है; पिछड़े कर्सर को ऐप इंजन एसडीके 1.4.0 के रूप में लागू नहीं किया गया है। इसलिए, पिछले पृष्ठ की कार्यक्षमता को लागू करने के लिए, यह सुझाव दिया जाता है कि मैं कर्सर पृष्ठ को मेमचेचे में संग्रहीत करता हूं। लेकिन मेरा सवाल यह है - जब डेटा रिकॉर्ड में नया रिकॉर्ड जोड़ा जाता है, तो संबंधित पृष्ठों के लिए पुराने कर्सर अमान्य हो जाएंगे। मैं ऐसी परिस्थितियों को कैसे संभाल सकता हूं?Google App Engine

क्या कोई ऐसा व्यक्ति है जिसने जावा में कर्सर के साथ पहले से ही इस कार्यक्षमता को लागू किया है? कृपया इसके लिए एल्गोरिदम विस्तृत करें।

इसके अलावा, मैंने जावा में इसके लिए एक ठोस कार्यान्वयन/उदाहरण नहीं देखा है। यदि संभव हो तो कृपया कुछ लिंक साझा कर सकते हैं।

उत्तर

9

यदि आपका समाधान AJAX-y है, तो आप जावास्क्रिप्ट में क्लाइंट पक्ष पर एक सरणी में कर्सर (एक स्ट्रिंग के रूप में) रख सकते हैं, इसलिए आपको इसे memcache में स्टोर करने की आवश्यकता नहीं है।

जब डेटा जोड़ा जाता है (या हटाया/बदला जाता है) पुराने कर्सर अमान्य नहीं होते हैं। आप अभी भी उनका उपयोग कर सकते हैं। आपके मामले में, वे मूल रूप से किसी पृष्ठ पर पहली आइटम का प्रतिनिधित्व करते हैं। तो एकमात्र चीज जो हो सकती है वह यह है कि यदि आप परिणामों के पेज 3 पर हैं और वापस नेविगेट करते हैं और फिर आगे बढ़ते हैं, तो हो सकता है कि आप पेज 3 पर पहले की गई सटीक इकाइयों को न देख सकें।

उदाहरण के लिए यदि आप पेज 2 से गए हैं

  • पृष्ठ 2 (कर्सर = x2) परिणाम: [डी, ई, एफ, ..., जी]
  • पेज 3 (कर्सर = x3) परिणाम: पेज 3 के लिए [घंटा, i, j , ...]

फिर, यदि 'ई' हटा दिया गया है। पीछे की ओर जाकर, पृष्ठ 2 (कर्सर = x2) अब [डी, एफ, ..., जी, एच] दिखाएगा, और जब से यह बदल गया है हम कर्सर x3 को अपडेट करते हैं (हम पृष्ठ 2 के लिए प्रत्येक fetch() के बाद इसे जांचते हैं)। आगे बढ़ते हुए, पेज 3 में अब [i, j, ...]

इसी प्रकार, यदि 'e' के बाद 'e2' जोड़ा गया है, तो पृष्ठ 2 पर वापस जाकर हमारे पास [डी, ई, ई 2, एफ, ...] और एक्स 3 अपडेट हो जाता है। और आगे बढ़ते हुए, पेज 3 में [जी, एच, आई, जे, ...]

एकमात्र चेतावनी पहला पृष्ठ कभी कर्सर का उपयोग नहीं करना चाहिए (यदि तत्व पहले से पहले जोड़े जाते हैं), और यदि अंतिम परिणाम के बाद तत्व जोड़े गए हैं, तो आपको हमेशा अगले पृष्ठ पर जाने के लिए "कोशिश" करने की अनुमति देनी चाहिए।

तो पृष्ठ संख्याएं बहुत विशिष्ट नहीं होंगी, लेकिन अपडेट किए जा सकने वाले पेज से निपटने पर वे वास्तव में नहीं हो सकते हैं। एक चाल पृष्ठ संख्याओं का उपयोग नहीं करना है, लेकिन पृष्ठों को "तत्व x से शुरू होने वाला डेटा" या उस तरह कुछ लेबल करें।

मुझे कोई कार्यान्वयन नहीं पता है, लेकिन इसे लागू करने के लिए काफी कठोर होना चाहिए। कर्सर कार्यक्षमता दस्तावेज़ों में बहुत अच्छी तरह से वर्णित है: http://code.google.com/appengine/docs/java/datastore/queries.html#Query_Cursors