Soy nuevo en el foro, os he leído mucho pero jamás había escrito. Llevo mucho tiempo usando MySQL, pero ahora me enfrento a una situación en la que me gustaría que alguien me orientara un poco por donde tirar.
El caso es que quiero hacer algo que posiblemente cargue mucho la Base de Datos y necesito alguna sugerencia.
Imaginemos que tengo una tabla de usuarios y tres tablas de acciones:
- Usuarios: id, nombre, puntuacion
- Accion1: id, id_usuario, datos, timestamp
- Accion2: id, id_usuario, datos, timestamp
- Accion3: id, id_usuario, datos, timestamp
Me gustaría que cada X tiempo, cada 5 minutos o cada 10 minutos, la puntuación de los usuarios se actualice a través de un cron con un script PHP, con una fórmula basada en el número de acciones realizadas en distintos periodos de tiempo. Lo simplifico para que me entendáis. Imaginaros que quiero que la puntuación sea una acumulación de puntos por la cantidad de acciones realizadas Accion1, Accion2 y Acción3:
- 2, 4 y 6 puntos respectivamente por cada acción relizada en las últimas 24 horas
- 1, 2 y 3 puntos respectivamente por cada acción realizada hace entre hace 24 y hace 48 horas
Si por ejemplo cada 5 minutos debo calcular la puntuación de todos los usuarios.
¿Cuál es la mejor manera de hacerlo?
Se me ocurren varias, pero como el número de usuarios y el número de acciones puede crecer muchísimo quiero hacer las cosas bien desde el principio para optimizar este proceso al máximo.
Mis opciones siempre pasan por contabilizar registros y luego tratarlos con PHP para hacer chorrocientos UPDATES usuario a usuario.
No se si debo intentar hacer algún JOIN, buscar hacer consultas con algún CASE o IF, o si las vistas me servirán de algo (nunca las he utilizado).
Toda ayuda será bien recibida, ya sea con sugerencias de consultas o con caminos hacia los que orientarme e investigar la solución, pero seguro que alguno de vosotros me puede echar un cable y ayudarme para al menos dirigirme hacia el buen camino.
Muchas gracias por adelantado.