5

estoy haciendo una aplicación Rails que contará con una gran cantidad de datos "calculados" o "agregados", es decir, la información que se calcula mediante la realización de operaciones costosas en los datos almacenados por el usuario. Estoy pensando que necesito alguna forma de almacenar estos datos, así que A. No estoy constantemente realizando costosas operaciones de BD, y B. Así que puedo escupir "informes" con gráficos bonitos a lo largo del tiempo, etc. para determinados atributos.rieles que almacenan información agregada

me pregunto cuál es la mejor forma de implementar esto es? Tendría que estar calculando y almacenando valores (numéricos) para un modelo dado, y cómo cambian con el tiempo. Quiero que esto sea eficiente y evite la duplicación y los datos. Los registros serán más o menos fijos una vez creados, así que no tengo que preocuparme de que las cosas se modifiquen demasiado, aunque debe tenerse en cuenta.

Me pregunto cuál es el enfoque más común para esto, y cómo debería implementar esto en la aplicación de Rails.

Respuesta

1

He estado trabajando en un problema similar y también he trabajado en aplicaciones que lo hicieron de forma incorrecta.

Aquí es mi mejor-prácticas recomendación:

  • tienda los datos en bruto en el modelo, vamos a llamarlo es Feed
  • Establecer una asociación uno-a-uno a otro modelo que contiene los valores calculados , p.ej FeedStats. Esto también puede ser una asociación uno a muchos o muchos a uno, dependiendo del caso exacto; es posible que algunos enrollar Feed registros individuales en algún tipo de agregado, etc.
  • Mantenga todos los datos brutos originales alrededor. Esto será extremadamente útil si luego desea cambiar el cálculo a algún otro algoritmo y es posible que necesite volver a calcular los datos antiguos, o si descubre errores en el cálculo, etc.
  • Configure el cálculo en una tarea en segundo plano, usando herramientas como Resque (con o sin Scheduler), DelayedJob o similar.

Si puede ser un poco más específico y dar algunos ejemplos de su problema exacto, quizás pueda dar algunos consejos más específicos. Buena suerte.

+0

Gracias por su respuesta, tengo algunos modelos, cada uno con atributos numéricos (algunas columnas db, algunos métodos que calculan valores). Quiero graficar los cambios en estos a lo largo del tiempo. Supongo que el método más simple sería simplemente seleccionar todos los valores en el rango, y guardar en caché esta consulta utilizando los carriles incorporados en el caché. Me preguntaba si existía un método estándar para producir tales estadísticas. He visto esta joya que se ve a lo largo de las líneas correctas: https://github.com/acatighera/statistics - Gracias de nuevo :) – Fred

+0

No me he encontrado con esto, pero parece interesante. –

Cuestiones relacionadas