¿Cuál es un buen algoritmo para una tabla de clasificación rodante?

Esta es realmente una pregunta compleja ya que la base de datos y la escala son consideraciones muy importantes.

Asumamos una base de datos SQL por ahora.

Un buen enfoque es almacenar los mejores puntajes diarios, semanales y mensuales por separado. Quizás una tabla para cada intervalo de tiempo.

Siempre que el usuario genere un nuevo puntaje, si es mejor que su puntaje anterior, actualice sus registros diarios / semanales / mensuales en las tablas correspondientes.

Lo bueno es que los datos ya están filtrados por intervalo de tiempo, por lo que hay mucho menos trabajo para encontrar y ordenar. Además, cada usuario solo tiene una entrada para un intervalo de tiempo particular, por lo que no necesita encontrar la mejor puntuación para un usuario en particular. Todo esto está precalculado.

La desventaja es que si un usuario crea un nuevo puntaje alto, podría tener que hacer tres lecturas / escrituras. Dependiendo de la aplicación, esto podría generar más IO de las que puede manejar un único servidor. Entonces, debe analizar cómo escalar a varias máquinas (o pasar de HDD a SSD).

Ok para profundizar un poco más.

Una tabla de clasificación es esencialmente una lista gigante de valores. Cuanto más grande sea esa lista, más tiempo llevará encontrarla y ordenarla. Es por eso que separarse en D, W, M es un enfoque simple que te lleva bastante lejos.

Además, dependiendo de cuántos jugadores tengas, esa lista de valores puede ser muy larga. Digamos que tiene un millón de puntajes en su tabla mensual. ¿Cuánto tiempo llevaría consultar las puntuaciones y devolver una lista ordenada?

Otra consideración de rendimiento es cuántas escrituras / lecturas obtendrá su tabla de clasificación. Si está escribiendo mucho en su base de datos, esto afectará el rendimiento de lectura. Entonces, ¿necesita implementar una capa de almacenamiento en caché?

¿Los datos deben ser en tiempo real?
¿Qué pasa si los datos tenían unos minutos de antigüedad?
¿Eso afectaría la usabilidad?

Entonces, a medida que profundiza, hay más preguntas sobre la pila / arquitectura total de cómo almacenar / recuperar datos de la tabla de clasificación.

Sin embargo, si fuera a construirlo todo de nuevo, simplemente usaría el esquema D, W, M. Pondría un índice en la columna de puntuación, para que la base de datos pueda optimizarlo, y seguir con eso hasta que sea demasiado lento y tenga que rediseñarlo.

En última instancia, es mucho más difícil conseguir jugadores que crear una base de datos de clasificación simple + consultas SELECT. Así que enfócate en eso primero y luego escala tu tabla de clasificación cuando lo necesites.

Podrías usar el backend de App42 para tablas de clasificación y es bastante popular en la comunidad por su integración en Facebook. Puede crear tablas de clasificación que muestren una clasificación global, así como solo entre los amigos del usuario. Lo más fácil es echar un vistazo a su tutorial de trabajo con código fuente. y comience con la integración de la tabla de líderes en tiempo real.

More Interesting

Supongamos que eliminamos un borde de un árbol de expansión y luego agregamos un borde diferente para que permanezca conectado. ¿Seguirá siendo un árbol de expansión?

¿Cuáles son algunos de los recursos disponibles para los estudiantes de informática en predicción de la estructura secundaria de ARN?

¿Por qué son importantes las pruebas para estudiar algoritmos y estructuras de datos? ¿Estudiar esas pruebas complejas es realmente necesario?

¿Cuáles son los diferentes usos de la estructura de datos Trie?

Mientras practico la programación, muchas veces no puedo escribir código para un algoritmo o pseudocódigo, incluso después de entender el algoritmo claramente en papel. ¿Cómo supero este problema?

¿Cuál es la relación entre los algoritmos y las IA (modernas)?

¿Cuál es la forma más rápida y eficiente de hacer una sustitución / sustitución de cadenas dentro de una cadena grande con JavaScript?

¿Cuál es el proceso de ejecución exacto de imprimir permutaciones de cadena de forma recursiva?

¿Cuál es el número de elementos comunes en dos conjuntos de permutación?

Cómo encontrar la subcadena común más larga de tres o más cadenas usando una matriz de sufijos

¿Es la incapacidad de implementar estructuras de datos básicas como una lista doblemente enlazada, un árbol con punteros primarios usando un código seguro la mayor debilidad de Rust?

¿Qué son los pseudocódigos para GCD?

El tiempo supuestamente imaginario puede modelarse significativamente en física. Entonces, ¿puede existir una complejidad de tiempo imaginaria para un algoritmo?

Cómo resolver esta relación de recurrencia: (bn + 1) = 6 * ((bn)) ^ 7, b (0) = 36

¿Existe un algoritmo que lo ayude a visualizar las distancias entre los n nodos de manera óptima?