2010-10-08 28 views
5

में एग्री इंजन डेटास्टोर को कुल परिणाम के लिए पूछताछ नहीं की जा सकती है, समेकन ("द्वारा समूह") की क्वेरी करने के लिए वैकल्पिक रणनीति।Google एप इंजन डेटास्टोर

उदाहरण: मैं निम्नलिखित क्षेत्रों के साथ "पोस्ट" नामक संस्था है:

कुंजी आईडी, स्ट्रिंग उपनाम, स्ट्रिंग postText, पूर्णांक स्कोर

मैं कई अलग अलग उपनाम और प्रत्येक उपनाम से कई पदों है मेरे डेटास्टोर में।

अगर मैं कुल स्कोर के शीर्ष दस उपनाम के एक नेता बोर्ड चाहता हूँ, मैं आम तौर पर एसक्यूएल इस प्रकार होगा:

select nickname, sum(score) as sumscore 
from Post 
group by nickname 
order by sumscore 
limit 10 

क्वेरी के इस प्रकार गूगल एप इंजन डेटासंग्रह जावा एपीआई में संभव नहीं है (JDO या जेपीए)।

वैकल्पिक रणनीतियां क्या हैं जिनका उपयोग मैं इसी तरह के परिणाम प्राप्त करने के लिए कर सकता हूं?

क्रूरतापूर्वक और दृढ़ता से, मैं प्रत्येक पोस्ट इकाई लोड कर सकता हूं और मेरे आवेदन कोड में पूरी तरह से एकत्रीकरण की गणना कर सकता हूं। यह स्पष्ट रूप से बड़े डेटासेट पर कुशल नहीं है।

मैं अन्य रणनीतियां कैसे नियोजित कर सकता हूं?

+1

यदि Google ने केवल अपनी प्लगइन अपडेट की है तो डेटान्यूक्लियस आपके लिए पारदर्शी रूप से "क्रूड एंड ब्रूट फोर्स" दृष्टिकोण करेगा। ऐसा करने के लिए कोड केवल उनके प्लगइन के लिए कुछ हद तक लाइनों का होगा, एक साल पहले योगदान दिया ... – DataNucleus

+1

@डेटाक्लियस अंतर्निहित समर्थन होने से यह कोई तेज़ या अधिक कुशल नहीं होगा। –

+1

@ निक, निश्चित रूप से यह नहीं होगा, लेकिन पूरा उपयोगकर्ता अनुभव एक सुखद दृष्टि अधिक सुखद होगा, और लोगों को लिखने के लिए कोड की मात्रा कम होगी - यही वह व्यवसाय है जो हम – DataNucleus

उत्तर

10

Nickname मॉडल बनाएं, और प्रत्येक बार जब आप कोई नई पोस्ट जोड़ते हैं, तो संबंधित उपनाम पुनर्प्राप्त करें और वहां संग्रहित स्कोर योग बढ़ाएं। अनिवार्य रूप से, गणना/अद्यतन समय पर गणना करें, क्वेरी-टाइम नहीं।

+0

हाय एम्बर।आपके सहयोग के लिए धन्यवाद। मैं पहले से ही कुछ डिग्री कर रहा हूँ। (मेरा मॉडल मैंने इसे वर्णित करने से अधिक जटिल है)। मैं पहले से ही इस पर जाने के लिए आवेषण और अद्यतनों पर बहुत सारे डेटा एकत्र कर रहा हूं। लेकिन इस तरह से हर संभावित समेकित आंकड़े को बचाने के लिए संभव नहीं है (मेरे पास कई अलग-अलग आंकड़े हैं जिन्हें मैं अब और फिर गणना करना चाहता हूं)। लेकिन यह अभी भी एक वैध जवाब है। – Patrick

+1

एम्बर का दृष्टिकोण सही है, और यह स्केल करेगा। मैं दर्जनों की गणना करने के लिए 'भौतिक विचारों के साथ प्रशंसक-इन' (http://code.google.com/events/io/2010/sessions/high-throughput-data-pipelines-appengine.html) के समान दृष्टिकोण का उपयोग करता हूं समुच्चय। यह काफी अच्छी तरह से काम करता है। –

+1

मैं इस तकनीक का उपयोग कर रहा हूं, विवाद के साथ विवाद को कम करने के लिए (http://code.google.com/appengine/articles/sharding_counters.html); साथ ही इस तरह के काउंटरों और आंकड़ों के अपडेट को स्थगित करने में सक्षम होने के नाते। मैं इस जवाब को सर्वश्रेष्ठ के रूप में चिह्नित कर रहा हूं। – Patrick

संबंधित मुद्दे