PHP/mySQL: ricalcolo regolare dei valori di riferimento man mano che i nuovi utenti inviano i propri dati

StackOverflow https://stackoverflow.com/questions/83088

Domanda

Mi sto confrontando con un nuovo tipo di problema che non avevo ancora incontrato nella mia giovanissima "carriera" di programmatore e vorrei conoscere la tua opinione su come affrontarlo al meglio.

La situazioneUn'applicazione di ricerca (php/mysql) raccoglie dati sulla salute legati allo stress degli utenti.L'utente riceve un'analisi dopo aver compilato il questionario.Il valore per ciascun parametro viene trasformato in un valore percentile utilizzando un benchmark (media e deviazione standard del set di dati esistente).

L'obiettivoPoiché sempre più persone compilano il questionario, esiste la possibilità di rendere i valori di riferimento (media/SD) più accurati ricalcolandoli utilizzando i nuovi dati utente.Vorrei che il database eseguisse regolarmente uno script che aggiorni i valori di benchmark.

La domandaFinora non ho mai utilizzato le procedure memorizzate e ho solo una vaga idea di cosa siano, ma in qualche modo ho la sensazione che potrebbero aiutarmi in questo?Oppure dovrei scrivere lo script come php e quindi impostare un processo cron?

[modifica]Dopo le prime risposte sembra che cron sia chiaramente la strada da percorrere.[/edit]

È stato utile?

Soluzione

Ciò che stai considerando potrebbe essere fatto in diversi modi.

  1. Potresti impostare un trigger nel tuo DB per ricalcolare i valori ogni volta che un nuovo record viene aggiornato.Se necessario, è possibile memorizzare il codice necessario per aggiornare i valori in uno sproc.

  2. Potresti scrivere uno script PHP ed eseguirlo regolarmente tramite cron.

#1 rallenterà gli inserimenti nel tuo database ma farà in modo che i tuoi dati lo siano Sempre aggiornato.#2 potrebbe bloccare le tabelle mentre aggiorna i nuovi valori e i tuoi dati saranno accurati solo fino al prossimo aggiornamento.#2 è molto più semplice eseguire il backup, poiché lo script può essere facilmente archiviato nel tuo sistema di controllo delle versioni, mentre dovresti archiviare gli script di creazione del trigger e dello sproc in qualunque backup effettueresti.

Ovviamente dovrai valutare le tue esigenze prima di scegliere un metodo.

Altri suggerimenti

PHP configurato come processo cron ti consente di mantenerlo nel tuo sistema di gestione del codice sorgente e, se stai utilizzando un livello di astrazione del database, sarà trasferibile su altri database se mai decidessi di cambiare.Per questi motivi, tendo a preferire gli script alle procedure memorizzate.

Il modo più semplice per farlo funzionare è probabilmente scrivere uno script nella stessa lingua utilizzata dal tuo sito web (suona come PHP) e chiamarlo da cron.

Non è necessario renderlo più complicato del necessario inserendo la logica in due posti (i calcoli esistenti e una procedura memorizzata).

Se il volume dei dati è abbastanza grande da rendere eccessivo il calcolo al volo, allora:

  1. Lavoro cron con script php per denormalizzare i totali
  2. Trigger sugli inserimenti che incrementa i totali

Vai con il lavoro cron modo.Semplice, solido, funziona.Nel mondo PHP/MySQL direi che le procedure memorizzate non sono utilizzabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top