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

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

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

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

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

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

С уважением!

 Don15 нояб. 2009 г., 07:44
Как вы определяете автобид, когда есть два ожидающих автобида, как они взаимодействуют? Что делает конец аукциона? Возможно, в конце аукциона запланирована работа cron, чтобы оценить, кто победил. Веб-сайт просто заблокирует торги на завершенном аукционе. Работа cron отправит электронное письмо тому, кто победит.
 Gowri22 мар. 2011 г., 12:44
+1 потому что у меня такой же вопрос
 Saif Bechan15 нояб. 2009 г., 13:11
Привет, позвольте мне объяснить концепцию немного дальше. Аукцион начинается с 0,00 EUR. Когда кто-то размещает немного, цена повышается с 0,01 евро. Ставки - это места с кредитами, которые они покупают. Когда аукцион подходит к концу и кто-то делает ставку, аукцион продлевается на 60 секунд. Поэтому, когда люди хотят уйти, они могут поставить автоматические торги. Эти предложения будут и должны быть размещены случайным образом до окончания аукциона, продления времени еще на одну минуту и т. Д. Торги неТ взаимодействовать друг с другом. Случайно выбирается один торг, а не последний участник.

Ответы на вопрос(4)

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

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

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

 Matijs15 нояб. 2009 г., 00:41
Триггеры - это фрагменты кода SQL, которые автоматически выполняются при изменении данных в таблице. Хранимые процедуры представляют собой наборы команд SQL, связанных вместе. Просто проверьте документацию на сайте MySQL.
 Saif Bechan14 нояб. 2009 г., 19:28
Привет, спасибо за ответ. У меня есть дополнительный вопрос по этому вопросу. Это может показаться вопросом для начинающих, но что именно является триггером, триггером MySQL. И каковы хранимые процедуры. Я предполагаю, что хранимые процедуры - это написанные мной php-скрипты, которые обновляют базу данных. Если я сделаю php-скрипт, который будет работать вечно до тех пор, пока не будет вечно, будет ли это потреблять много ресурсов процессора?
Решение Вопроса

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

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

 Jauco16 нояб. 2009 г., 10:11
Тогда первая часть моего ответа, то есть отдельный скрипт, который выполняется вечно (с циклом while (true) и сном 1 сек.), Будет лучшим вариантом.
 Saif Bechan14 нояб. 2009 г., 19:25
Привет, спасибо за реакцию. Это может быть решением проблемы. Но я хочу иметь возможность отправить пользователю электронное письмо, как только он выиграл акцию. И если мы увидим, что 3 человека включили свои автоматические ставки, и они покинули веб-сайт, все предложения должны быть сделаны случайным образом в течение оставшегося периода. Когда ставки сделаны, электронное письмо должно быть отправлено. Я действительно хочу, чтобы весь процесс прошел без того, чтобы кто-то был на сайте.

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

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

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

нагрузка на базу данных распределена органичноВы делаете только те поиски, которые действительно необходимы в то время.это в режиме реального времени, а не на основе тиковпроще рассуждать о логике бизнеса / приложения, потому что она локальная, а не глобальная
 Saif Bechan15 нояб. 2009 г., 00:15
Хорошо, что люди платят, чтобы сделать ставку, поэтому важно, чтобы все автобиды были размещены.
 Saif Bechan14 нояб. 2009 г., 19:22
Привет, спасибо за ответ, но я не думаю, что смогу использовать эту модель. Позволять'Например, 3 человека активировали свои ставки и покидают сайт. Сейчас на сайте нет никого, или занятого на сайте. Все предложения должны быть сделаны до окончания аукциона.
 tosh14 нояб. 2009 г., 20:02
Насколько я понимаю, это все равно будет работать, потому что, если никто не посещает веб-сайты, никто не может делать ставки, поэтому не нужно обрабатывать автоматические ставки, верно? Конечно, если вы хотите отправлять уведомления (электронная почта, смс,…) когда аукцион заканчивается, вам нужно наблюдать за системой. Хотя я думаю, что было бы достаточно использовать cron, который запускается каждые 5 минут и проверяет все аукционы, которые закончились. Будет ли это работать для вас или есть дополнительные требования к тому, как должны работать аукционы?

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

Ваш ответ на вопрос