से मेल खाने वाले आइटमों का एक पृष्ठ/आइटम गिनती/नेविगेशन प्रदान करने के लिए विचार/विकल्प ढूंढना मुझे डेटास्टोर सादगी, मापनीयता और उपयोग में आसानी पसंद है; और नए ndb लाइब्रेरी में पाए गए एन्हांसमेंट शानदार हैं।GAE डेटास्टोर क्वेरी
जैसा कि मैं डेटास्टोर सर्वोत्तम प्रथाओं को समझता हूं, किसी को प्रश्न पूछने वाले आइटम की संख्या और/या पृष्ठ क्वेरी की गणना करने के लिए कोड नहीं लिखना चाहिए जब क्वेरी से मेल खाने वाली वस्तुओं की संख्या बड़ी होती है; क्योंकि ऐसा करने का एकमात्र तरीका संसाधनों को गहन करने वाले सभी परिणामों को पुनर्प्राप्त करना है।
हालांकि, हमारे सहित कई अनुप्रयोगों में, मिलान करने वाली वस्तुओं की गिनती देखने और उपयोगकर्ता को उन परिणामों के एक विशिष्ट पृष्ठ पर नेविगेट करने की क्षमता प्रदान करने की एक आम इच्छा है। Paging Through Large Datasets आलेख में उल्लिखित अनुसार fetch (सीमा, ऑफ़सेट = एक्स) की सीमाओं के आसपास काम करने की आवश्यकता से डेटास्टोर पेजिंग समस्या अधिक जटिल है। अनुशंसित दृष्टिकोण का समर्थन करने के लिए, डेटा में एक विशिष्ट मूल्यवान कॉलम शामिल होना चाहिए जिसे परिणामों को प्रदर्शित करने के तरीके में आदेश दिया जा सकता है। यह कॉलम परिणामों के प्रत्येक पृष्ठ के लिए प्रारंभिक मान परिभाषित करेगा; इसे सहेजते हुए, हम इसी पृष्ठ को कुशलता से प्राप्त कर सकते हैं, जिससे नेविगेशन को अनुरोध के अनुसार एक विशिष्ट या अगले पृष्ठ पर अनुमति मिलती है। इसलिए, यदि आप कई तरीकों से आदेशित परिणाम दिखाना चाहते हैं, तो ऐसे कई स्तंभों को बनाए रखने की आवश्यकता हो सकती है।
यह ध्यान दिया जाना चाहिए कि एसडीके v1.3.1, Query Cursors के रूप में डेटास्टोर पेजिंग करने का अनुशंसित तरीका है। इनकी कुछ सीमाएं हैं, जिनमें IN और! = फ़िल्टर ऑपरेटर के लिए समर्थन की कमी शामिल है। वर्तमान में हमारे कुछ महत्वपूर्ण प्रश्न में उपयोग करते हैं, लेकिन हम क्वेरी कर्सर के उपयोग के लिए या का उपयोग करके उन्हें लिखने का प्रयास करेंगे।
दिशा निर्देशों का सुझाव दिया के बाद, एक उपयोगकर्ता एक (अगला) और (पिछला) नेविगेशन बटन, साथ ही विशेष पृष्ठ बटन के रूप में नेविगेशन दीं दिया जा सकता। उदाहरण के लिए यदि उपयोगकर्ता (अगला) दबाकर 3 बार दबाता है, तो ऐप नेविगेशन कुशल रखने के लिए प्रत्येक के लिए अद्वितीय प्रारंभिक रिकॉर्ड या कर्सर को याद करते हुए निम्न बटन दिखा सकते हैं: (पिछला) (पृष्ठ -1) (पृष्ठ -2) (पेज -3) (पेज -4) (अगला)।
कुछ ने अलग-अलग मामलों का ट्रैक रखने का सुझाव दिया है, लेकिन यह दृष्टिकोण व्यावहारिक नहीं है जब उपयोगकर्ताओं को उन क्षेत्रों के समृद्ध सेट पर पूछने की अनुमति दी जाएगी जो परिणाम लौटाएंगे।
मैं सामान्य रूप में इन मुद्दों पर अंतर्दृष्टि और विशेष रूप से निम्न प्रश्नों के लिए देख रहा हूँ: अपने डेटासंग्रह क्षुधा में
नौवहन क्या क्वेरी परिणामों के विकल्प आप प्रदान करते हैं इन सीमाओं को हल करने के लिए?
तो कुशल परिणाम मायने रखता है और पेज संपूर्ण क्वेरी परिणाम सेट के नेविगेशन के साथ उपयोगकर्ताओं को उपलब्ध कराने के एक प्राथमिकता है, डेटा स्टोर का उपयोग करना चाहिए GAE MySql solution अब पेशकश की जा रही के पक्ष में छोड़ दिया जाना।
क्या बड़े टेबल आर्किटेक्चर या डेटास्टोर कार्यान्वयन में कोई आगामी बदलाव है जो के लिए अतिरिक्त क्षमता प्रदान करेगा, जो एक प्रश्न के कुशलतापूर्वक परिणाम की गणना कर रहा है?
आपकी सहायता के लिए अग्रिम धन्यवाद।
मान लीजिए कि हम उपयोगकर्ता को "1-20 का सी" या "1-20 में से कई को दिखाने के लिए सी = query.count (N) दृष्टिकोण का उपयोग करते हैं, हम अपने उपयोग में एन के लिए उचित मूल्य, लागत के अनुसार कैसे निर्धारित करते हैं। मामला 100 बहुत छोटा होगा। इस पर कोई सुझाव है कि इसका मूल्य $ कम रखने के लिए सबसे अच्छा कैसे किया जाए? एनडीबी दस्तावेज़ों से: "ध्यान दें कि गिनती(), जबकि fetch() से तेज़ है, तब भी जब भी इसे कॉल किया जाता है तो बहुत सारे काम करता है "कितना कोटा उपयोग किया जाता है? गुइडो, पायथन, एनडीबी और आपकी मदद के लिए धन्यवाद :) आईएमओ पेज मायने रखता है और नौसेना कुछ ऐप्स के लिए एक अच्छी सुविधा है क्योंकि उपयोगकर्ता अपने पैरा से मेल खाने वाले डेटा के आकार का मूल्यांकन और समायोजन कर सकते हैं ड्रिलिंग से पहले –
आप इस पृष्ठ का उपयोग कर लागत की गणना कर सकते हैं: http://code.google.com/appengine/docs/billing.html#Billable_Resource_Unit_Costs। AFAIK एक गणना() एक कुंजी-केवल क्वेरी की तरह है। कैशिंग पर विचार करें मायने रखता है। (समर्थक के आधार पर ब्लेम, यदि आपके पास कैश की सीमित संख्या है, तो आप sharded-counter पैटर्न का उपयोग करके डेटास्टोर में गिनती स्टोर कर सकते हैं।) –
आईएन/या क्वेरी पर भी एक अपडेट: आप किसी भी क्वेरी को कर्सर में बदल सकते हैं मौजूदा सॉर्ट ऑर्डर के अंत में __key__ द्वारा ऑर्डरिंग जोड़कर क्वेरी का समर्थन करना। जैसे एनडीबी में: 'कर्मचारी.क्यूरी (कर्मचारी.नाम.आईएन (['जो', 'जेन'])) आदेश (कर्मचारी। नाम, कर्मचारी.की) .fetch_page (एन)' - कर्मचारी.की आदेश के बिना यह BadArgumentError उठाता है। –