PHP / MySQL - регулярный пересчет контрольных значений по мере того, как новые пользователи отправляют свои данные

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

Вопрос

Я столкнулся с проблемой нового типа, с которой еще не сталкивался в своей очень молодой "карьере" программиста, и хотел бы узнать ваше мнение о том, как лучше всего ее решить.

Ситуация Исследовательское приложение (php / mysql) собирает данные о состоянии здоровья пользователей, связанные со стрессом.Пользователь получает анализы после заполнения анкеты.Значение для каждого параметра преобразуется в процентильное значение с использованием эталона (среднее и стандартное отклонение существующего набора данных).

Задача Поскольку анкету заполняет все больше и больше людей, есть возможность сделать контрольные значения (mean / SD) более точными путем их пересчета с использованием новых пользовательских данных.Я бы хотел, чтобы база данных регулярно запускала скрипт, который обновляет контрольные значения.

Этот вопрос До сих пор я никогда не использовал сохраненные прецеденты, и у меня есть лишь слабое представление о том, что это такое, но почему-то у меня такое чувство, что они могли бы помочь мне с этим?Или я должен написать скрипт как php, а затем настроить задание cron?

[править] После первых двух ответов кажется, что cron - это правильный путь.[/править]

Это было полезно?

Решение

То, что вы рассматриваете, может быть сделано несколькими способами.

  1. Вы могли бы настроить триггер в своей базе данных для пересчета значений всякий раз, когда обновляется новая запись.При необходимости вы могли бы сохранить код, необходимый для обновления значений, в sproc.

  2. Вы могли бы написать PHP-скрипт и регулярно запускать его через cron.

# 1 замедлит вставку в вашу базу данных, но обеспечит сохранность ваших данных. всегда в курсе последних событий.# 2 может заблокировать таблицы на время обновления новых значений, и ваши данные будут точными только до следующего обновления.# 2 намного проще создавать резервные копии, поскольку сценарий можно легко сохранить в вашей системе управления версиями, в то время как вам нужно было бы хранить сценарии создания триггера и sproc в любой резервной копии, которую вы бы сделали.

Очевидно, что вам придется взвесить свои требования, прежде чем выбирать метод.

Другие советы

PHP, настроенный как задание cron, позволяет вам сохранить его в вашей системе управления исходным кодом, и если вы используете уровень абстракции базы данных, он будет переносим в другие базы данных, если вы когда-нибудь решите переключиться.По этим причинам я предпочитаю использовать скрипты, а не хранимые процедуры.

Вероятно, самый простой способ заставить это работать - написать скрипт на том же языке, который использует ваш веб-сайт (звучит как PHP), и вызвать его из cron.

Нет необходимости усложнять это больше, чем это необходимо, помещая логику в два места (ваши существующие вычисления и хранимую процедуру).

Если объем данных достаточно велик, что вычислять их "на лету" слишком сложно, то либо:

  1. Задание Cron с помощью php-скрипта для денормализации итогов
  2. Запускает при вставках, которые увеличивают итоговые значения

Идите с задание cron образом.Простой, надежный, работающий.В мире PHP / MySQL я бы сказал, что хранимые процедуры не работают.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top