Hola amigos, necesito un segunda o tercera opinión.
Estoy sobre una arquitectura en spring boot de 3 capas, controlers, servicios y jpa abajo. Como base de datos estoy utilizando mysql.
Les comento el problema. Tengo una estructura en mi base de datos que representa alumnos, donde cada alumno tiene un curso asociado y cada curso N modulos, lo cuales tienen N cuestionarios y cada cuestionario N preguntas.
Tengo un algoritmo de calculo que dependiendo de cierto parametro de ponderacion ejecuta un patron strategy y realiza los calculos de una forma u otra aplicando ponderaciones diferentes. El tema es que para realizar los cálculos tengo que levantar toda esta estructura de alumnos en memoria y calcular los resultados.
Opción 1: Usar colas de mensajes y varios hilos asyncronos, de forma que un hilo a medida que lee de la base, lo tira en la cola y el otro hilo a medida que recibe va calculando. Creo que de esa forma escalaría bastante.
Opción 2: Calcular los resultados y tirarlos para una tabla cache, de forma que la segunda vez que se quiera calcular para el mismo parámetro de ponderación el resultado ya este calculado.
Alguna otra solución elegante para evitar levantar en memoria y calcular estas cosas ?
habrá cerca de 4 000 alumnos, donde cada uno tenga mas de un curso y N moduos N cuestionarios y sobretodo muchas preguntas asociadas.
P:D Creen que usando una base no relacional pueda mejora en eficiencia ?
Hola amigos, necesito un segunda o tercera opinión.
Estoy sobre una arquitectura en spring boot de 3 capas, controlers, servicios y jpa abajo.
Como base de datos estoy utilizando mysql.
Les comento el problema.
Tengo una estructura en mi base de datos que representa alumnos, donde cada alumno tiene un curso asociado y cada curso N modulos, lo cuales tienen N cuestionarios y cada cuestionario N preguntas.
Tengo un algoritmo de calculo que dependiendo de cierto parametro de ponderacion ejecuta un patron strategy y realiza los calculos de una forma u otra aplicando ponderaciones diferentes. El tema es que para realizar los cálculos tengo que levantar toda esta estructura de alumnos en memoria y calcular los resultados.
Opción 1: Usar colas de mensajes y varios hilos asyncronos, de forma que un hilo a medida que lee de la base, lo tira en la cola y el otro hilo a medida que recibe va calculando. Creo que de esa forma escalaría bastante.
Opción 2: Calcular los resultados y tirarlos para una tabla cache, de forma que la segunda vez que se quiera calcular para el mismo parámetro de ponderación el resultado ya este calculado.
Alguna otra solución elegante para evitar levantar en memoria y calcular estas cosas ?
habrá cerca de 4 000 alumnos, donde cada uno tenga mas de un curso y N moduos N cuestionarios y sobretodo muchas preguntas asociadas.
P:D Creen que usando una base no relacional pueda mejora en eficiencia ?
Un saludo,
Gracias.