Триггер Mysql/события против Cronjob


У меня есть веб-сайт аукциона, который позволяет моим пользователям размещать неограниченное количество автозаказов.

Чтобы отслеживать эти автоответчики, что-то должно проверять базу данных каждую секунду.

Мой вопрос в том, лучше ли использовать события запуска mysql или каждую минуту использовать cronjob, который выполняет php-скрипт с циклом 60 секунд.

Если я использую события триггера mysql, то будут сотни стеков событий друг на друга, и они будут запущены в разное время. Возможно ли это вообще?? и не слишком ли велика нагрузка на сервер? Я где-то слышал, что база данных будет заблокирована, пока происходит запланированное событие. Кстати, я использую таблицы InnoDB.

Я надеюсь, что кто-нибудь сможет пролить свет на этот топик.

С уважением!

Author: Saif Bechan, 2009-11-14

4 answers

Вам лучше всего запустить отдельный скрипт, который работает вечно и следит за вашей базой данных. Таким образом, вам не понадобится cron. Ни огромного количества триггеров.

Но вы, возможно, захотите пересмотреть весь свой вопрос. На самом деле нет необходимости обновлять ставки каждую секунду. Вам нужно только заполнить последние x минут/часов, когда кто-то действительно указывает в своем браузере на аукцион или делает ставку вручную. Если это все автобиды, вы можете легко рассчитать вперед и назад.

 1
Author: Jauco, 2013-05-29 09:15:28

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

Сказав это: поскольку ваши системы должны реагировать на действия пользователя, технически предпочтительным способом сделать это является использование триггеров. На практике это может привести к проблемам с производительностью, когда на вашем сайте действительно высокая загрузка, хотя использование запланированного события может вызывают те же проблемы.

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

 1
Author: Matijs, 2009-11-14 12:39:21

Я бы, вероятно, смоделировал решение вашей проблемы с автоматическими ставками немного по-другому:

Как насчет подхода, основанного на событиях? Вы сохраняете запросы на автоматические ставки своих пользователей, и если кто-то действительно делает ставки на объект, вы обрабатываете ранее поставленные в очередь автоматические ставки.

Это имеет следующие преимущества:

  • нагрузка на базу данных распределяется органично
  • вы выполняете только те запросы, которые действительно необходимы в данный момент.
  • это в реальном времени, а не основанный на тиках
  • проще рассуждать о логике бизнеса/приложения, потому что она локальная, а не глобальная
 0
Author: tosh, 2009-11-14 15:58:33

Вы можете использовать скрипт bash & shell для выполнения этого процесса автоматической подачи заявок. Перейдя по этой ссылке, вы получите представление: Скрипт Bash, который выполняет php-файл каждые 5 секунд

 0
Author: sankar muniyappa, 2015-03-31 13:13:36