PHP / mySQL - регулярный пересчет эталонных значений, когда новые пользователи представляют свои данные - PullRequest
2 голосов
/ 17 сентября 2008

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

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

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

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

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

Ответы [ 5 ]

1 голос
/ 17 сентября 2008

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

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

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

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

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

1 голос
/ 17 сентября 2008

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

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

1 голос
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

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