PHP / MySQL - recálculo regular de valores de referência como novos usuários enviar seus dados

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

Pergunta

Eu sou confrontado com um novo tipo de problema que eu ainda não encontrei na minha muito jovem "carreira" de programação e gostaria de saber sua opinião sobre como lidar com isso melhor.

A situação Um aplicativo de pesquisa (PHP / MySQL) reúne salientar dados de saúde relacionados de usuários. Usuário recebe uma uma análise após o preenchimento do questionário. Valor para cada parâmetro é transformado em um valor percentual usando um benchmark (devitation médio e padrão de conjunto de dados existente).

A tarefa Uma vez que mais e mais ppl são preenchimento do questionário, há o potencial de tornar os valores de referência (média / DP) mais precisos recalculando-los usando os novos dados do usuário. Gostaria que o banco de dados para executar regularmente um script que atualiza os valores de referência.

A questão Eu nunca usei precedures armazenados até agora e eu só tenho uma leve noção do que eles são, mas de alguma forma eu tenho um sentimento que talvez pudesse me ajudar com isso? Ou eu deveria escrever o script como PHP e, em seguida, configurar uma tarefa cron?

[editar] Após o primeiro par de respostas parece que cron é claramente o caminho a percorrer. [/ Edit]

Foi útil?

Solução

O que você está considerando poderia ser feito em um número de maneiras.

  1. Você pode configurar um gatilho em sua DB para recalcular os valores sempre que um novo registro é atualizado. Você pode armazenar o código necessário para atualizar os valores em uma sproc, se necessário.

  2. Você poderia escrever um script PHP e executá-lo regularmente via cron.

# 1 irá desacelerar inserções para seu banco de dados, mas irá garantir que seus dados é sempre até à data. # 2 pode bloquear as tabelas enquanto ele atualiza os novos valores, e seus dados só serão precisos até a próxima atualização. # 2 é muito mais fácil fazer backup, como o script pode ser facilmente armazenado em seu sistema de controle de versão, ao passo que você precisa para armazenar os scripts de gatilho e criação sproc em qualquer backup que você faria.

Obviamente você vai ter que pesar as suas necessidades antes de escolher um método.

Outras dicas

PHP configurado como um trabalho cron permite mantê-lo em seu sistema de gerenciamento de código fonte, e se você estiver usando uma camada de abstração de banco de dados que vai ser portável para outros bancos de dados, se você decidir que quer switch. Por essas razões, eu tendem a ir com scripts mais procedimentos armazenados.

A maneira mais fácil de fazer este trabalho é, provavelmente, para escrever um script na mesma língua o seu site está usando (soa como PHP) e chamá-lo a partir do cron.

Não há necessidade de torná-lo mais complicado do que ele precisa ser, colocando a lógica em dois lugares (seus cálculos existentes e um procedimento armazenado).

Se o volume de dados é grande o suficiente para que o seu cálculo em tempo real é demais, então:

  1. trabalho Cron com o script php para denormalise os totais
  2. Gatilho em inserções que incrementos totais

Vá com o trabalho cron caminho. Simples, sólidos, obras. No mundo PHP / MySQL eu diria procedimentos armazenados são no-go.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top