में इंटरनेट उच्च स्कोर को कैसे कार्यान्वित करें मैं अपने गेम के लिए इंटरनेट उच्च स्कोर लागू करना चाहता हूं। और उन खिलाड़ियों को फीडबैक दें जो उनके पास हैं (न केवल शीर्ष 100 या ऐसा कुछ)। स्कोर कहां अंक> सेGoogle App Engine
COUNT का चयन करें (*): सामान्य एसक्यूएल में यह है कि कैसा दिखेगा newUsersPoints
और GQL समान
db.GqlQuery कुछ है ("स्कोर से चुनें * कहां अंक >: 1 ", newUsersPoints) .count()
लेकिन चूंकि गिनती() केवल 1000 तक ही सीमित है, यह मेरे मामले में बहुत उपयोगी नहीं होगी। क्या आपके पास इसे कार्यान्वित करने के बारे में कोई विचार है?
मैं दो
सबसे पहले है:
उपयोग sharding काउंटर विचार (http://code.google.com/intl/pl/appengine/articles/sharding_counters.html) नया "तालिका" कि संग्रहीत करता है कि कितने स्कोर कुछ श्रेणी में हैं (from_points, to_points) बनाएं
उपरोक्त तालिका से सभी काउंटरों को सारांशित करें जहां range.to_points < newUsersPoints
पता लगाएं कि स्कोर में स्कोर के मुकाबले कितने स्कोर हैं, जहां नया स्कोर db.GqlQuery ("चयन करें * स्कोर से अंक>> 1 और अंक> = 2 और अंक <: 3", newUsersPoints, range.from_points , range.to_points) .count() + sumfrom2
ढूँढें रेंज है, जिसमें नई स्कोर में और उसके काउंटर बढ़ाने के है
स्प्लिट पर्वतमाला जो काउंटर 1000 (या 999) इतना है कि तुलना में बड़ा है 3. wouldn सीमा तक पहुंच नहीं है
स्कोर तालिका में नया स्कोर जोड़ें
जो काफी जटिल और त्रुटि प्रवण है। स्कोर जोड़ने से पहले हम कुछ रेंज और टाइमआउट बढ़ा सकते हैं। (नहीं व्यवहार)
दूसरा विचार:
समय-तरह सभी बिंदुओं से और उन्हें नए पदों देना स्कोर समय (? एक बार हर दिन) से (स्क्रिप्ट तो समय बाह्य हो सकते हम मात्रा में यह करने के लिए है)
पता लगाने के लिए, जिस पर जगह नई स्कोर हम सिर्फ
db.GqlQuery करना है ("स्कोर से चुनें * कहां अंक>: 1 सीमा 1", newUsersPoints)। .Get() precalculated_position + 1
कोई अन्य विचार?