У меня есть сайт аукциона, который позволяет моим пользователям размещать неограниченное количество автобизн.
Чтобы контролировать эти автообъявления, нужно проверять базу данных каждую секунду.
Мой вопрос в том, что лучше использовать триггерные события mysql или пользовательский cronjob каждую минуту, которая выполняет 60-секундный цикл php-скрипта.
Если я использую триггерные события mysql, на каждой из них будут сотни событий, и они будут срабатывать в разное время. Возможно ли это? ANd не означает, что загрузка сервера будет огромной. Я где-то слышал, что база данных будет заблокирована, в то время как есть событие с расширением. Я использую таблицы innoDB кстати.
Надеюсь, кто-то может пролить свет на эту вершину.
С уважением!
Лучше всего запускать отдельный скрипт, который работает вечно и наблюдает за вашей базой данных. Таким образом вам не понадобится cron. Не было большого количества триггеров.
Но вы можете пересмотреть весь свой вопрос. Нет необходимости фактически обновлять ставки каждую секунду. Вам нужно всего лишь заполнить прошлые х минут / часов, когда кто-то на самом деле указывает свой браузер на аукцион или делает ставку на ручную. Если это все автобипы, вы можете легко пересчитать вперед.
База данных обрабатывает запланированные запросы, отличные от других запросов. Но так как многие запланированные запросы содержат операции по обслуживанию базы данных и таблиц, которые блокируют базу данных, для них это не редкость.
Сказав, что: поскольку ваши системы должны реагировать на действия пользователя, предпочтительным для этого способом является использование триггеров. На практике это может привести к проблемам с производительностью, когда ваш сайт имеет большие нагрузки – хотя использование запланированного события может вызвать такую же проблему.
Мой совет заключается в том, чтобы поместить вашу логику в хранимые процедуры и вызвать эти хранимые процедуры из триггеров. Когда вы обнаружите, что триггеры не поддерживаются, вы всегда можете удалить триггеры и вызвать хранимые процедуры из задания cron.
Я бы, вероятно, смоделировал решение вашей проблемы автобизнеса несколько иначе:
Как насчет подхода, основанного на событиях? Вы сохраняете запросы на автоматическое задание своих пользователей, и если кто-то фактически накладывает ставки на объект, который обрабатывает ранее поставленные в очередь автоматические ставки.
Это имеет следующие преимущества:
Вы можете использовать скрипт bash & shell для выполнения этой процедуры автоматического выставления ставок. На этой ссылке вы получите представление: сценарий Bash, который выполняет php-файл каждые 5 секунд