Quiero implementar puntajes altos en Internet para mi juego. Y brinde comentarios a los jugadores sobre el lugar que ocupan (no solo top100 o algo así). En SQL normales que se vería así:Cómo implementar altos puntajes de Internet en Google App Engine
SELECT COUNT (*) de las puntuaciones que los puntos>: newUsersPoints
y GQL tienen algo similar
db.GqlQuery ("SELECT * FROM Puntuación DONDE puntos >: 1 ", newUsersPoints) .count()
pero como count() está limitado solo a 1000, no será muy útil en mi caso. ¿Tiene alguna idea sobre cómo implementar esto?
tengo dos
Primero:
Uso contadores sharding idea (http://code.google.com/intl/pl/appengine/articles/sharding_counters.html) Crear nueva "mesa" que almacena el número de puntuaciones son en cierto rango (from_points, to_points)
Sumar todos los contadores de la tabla anterior donde rango.a_puntos < nuevosUsuariosPuntos
Encuentra cuántos puntajes son más grandes que los puntajes en el rango donde el nuevo puntaje es db.GqlQuery ("SELECCIONAR * FROM Punta WHERE puntos>: 1 AND puntos> =: 2 Y puntos <: 3", nuevosUsersPoints, range.from_points , range.to_points) .count() + sumfrom2
gama Búsqueda en el que la nueva puntuación es en e incrementar su contador
de Split, que oscila contador es mayor que 1000 (o 999) de manera que 3. wouldn 'alcanzar el límite
Agregar nueva puntuación a la tabla de puntuaciones
que es bastante complicado y propenso a errores. Podríamos incrementar algún rango y Tiempo de espera antes de agregar el puntaje. (No transaccional)
segunda idea:
De vez en cuando (? Una vez al día) ordenar todas las puntuaciones por puntos y darles nuevas posiciones (script puede tiempo de espera así que tenemos que hacerlo en tramos)
Para saber en qué lugar nueva puntuación es simplemente lo hacemos
db.GqlQuery ("SELECT * FROM puntuación DONDE puntos>: 1 LIMIT 1", newUsersPoints). .get() precalculated_position + 1
¿Alguna otra idea?