5

Sto creando un'app Rails che includerà molti dati "calcolati" o "aggregati", cioè informazioni che vengono calcolate eseguendo operazioni costose sui dati memorizzati dall'utente. Sto pensando che ho bisogno di un modo per archiviare questi dati in modo che A. Non eseguo costantemente costose operazioni DB e B. In modo che io possa sputare "report" con grafici graziosi nel tempo ecc. Per determinati attributi.Rails che memorizzano informazioni aggregate

Mi chiedo quale sia il modo migliore per implementare questo? Dovrei calcolare e memorizzare valori (numerici) per un determinato modello e come cambiano nel tempo. Voglio che questo sia efficiente ed evitare la duplicazione e i dati. I record saranno praticamente risolti una volta creati, quindi non ho bisogno di preoccuparmi che le cose vengano cambiate troppo, anche se devono essere prese in considerazione.

Mi sono chiesto quale sia l'approccio più comune a questo e come dovrei implementarlo in un'applicazione Rails?

risposta

1

Ho lavorato su un problema simile e ho anche lavorato su applicazioni che lo hanno fatto nel modo sbagliato.

Ecco il mio best practice raccomandazione:

  • Conservare i dati grezzi nel modello, chiamiamolo è Feed
  • Impostare un'associazione uno-a-uno ad un altro modello che contiene i valori calcolati , per esempio FeedStats. Può anche essere un'associazione one-to-many o molti-a-uno, a seconda del caso esatto; potresti caricare alcuni singoli record Feed in una sorta di aggregato, ecc.
  • Mantieni tutti i dati grezzi originali in giro. Ciò sarà estremamente utile se in un secondo momento si desidera passare il calcolo a qualche altro algoritmo e potrebbe essere necessario ricalcolare i vecchi dati o scoprire bug nel calcolo, ecc.
  • Impostare il calcolo su un'attività in background, utilizzando strumenti come Resque (con o senza Scheduler), DelayedJob o simili.

Se puoi essere un po 'più specifico e dare alcuni esempi del tuo problema esatto, posso forse dare alcuni suggerimenti più specifici. In bocca al lupo.

+0

Grazie per la risposta, ho alcuni modelli ciascuno con attributi numerici (alcune colonne DB, alcuni metodi che calcolano i valori). Voglio tracciare i cambiamenti nel tempo. Immagino che il metodo più semplice sarebbe quello di selezionare tutti i valori dell'intervallo e memorizzare nella cache questa query utilizzando le guide incorporate nella cache. Mi chiedevo solo se esistesse un metodo standard per la produzione di tali statistiche? Ho visto questo gioiello che guarda lungo le linee giuste: https://github.com/acatighera/statistics - Grazie ancora :) – Fred

+0

Non ho incontrato questo, ma sembra interessante. –