Автоматическая база данных читает / пишет каждую секунду - PullRequest
3 голосов
/ 10 ноября 2009

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

Мой вопрос заключается в том, как реализовать такую ​​систему. Я сделал файлы php, и все готово, я сделал HTML-страницу, которая обновляется каждую секунду. Это работает, но мне интересно, есть ли лучшее решение.

Второй вариант, который я попробовал, заключался в создании Java-приложения, которое каждую секунду открывает веб-страницу. Это потребляет «много» памяти / процессора. Кроме того, я думаю, что где-то есть утечка памяти.

Я запускаю это приложение на выделенном Linux-сервере с CentOS и Plesk, поэтому я уверен, что есть много альтернатив.

Например:

  1. Cronjob, который выполняет php-файл каждую минуту, где php-файл зацикливается на одну минуту со сном.

  2. Один php-файл, который зацикливается на 1 секунду.

  3. Один cronjob, который выполняет и планирует другой cronjob через секунду.

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

  5. Я также слышал о скриптах cli, perl, python, но я не знаком ни с одним из них.

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

Если у кого-то есть другое альтернативное решение, я был бы рад услышать это.

Ответы [ 4 ]

2 голосов
/ 10 ноября 2009

Каждая секунда - это такой небольшой интервал, что cronjobs - это не вариант, и я бы настоятельно рекомендовал не использовать «веб-страницу», как есть, поскольку производительность важна, и скрипт будет написан для CLI.

Что бы я сделал, это:

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

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

Кстати, вам действительно нужно, чтобы оно выполнялось каждую секунду? На мой взгляд, автоматические ставки инициируются событиями, то есть тем, кто делает ставку больше, чем вы, пока осталось 10 секунд. Это звучит намного приятнее для реализации и требует меньше ресурсов (и вы также можете использовать там демона, слушающего события авто-ставок, но это другая история:)

2 голосов
/ 10 ноября 2009

Создание задания cron, которое выполняет рассматриваемый PHP-скрипт в заданный промежуток времени. Вы можете выполнить скрипт PHP из командной строки , если он написан с учетом контекста (не требует доступа к $_GET, $_POST и т. П.).

1 голос
/ 10 ноября 2009

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

В данном случае MySQL запускает или даже простой скрипт php, который НА ВСТАВЛЕНО для новой ставки, вы проверяете, сделал ли кто-либо еще максимальную ставку, превышающую эту ставку.обновите новую самую высокую ставку и текущую самую высокую цену.

Если есть несколько участников, вы можете сделать цикл и посмотреть, кто получит самую высокую ставку.

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

0 голосов
/ 10 ноября 2009

Если у вас уже есть страница, которая выполняет эту работу, вы можете запланировать cron, который вызывает команду curl каждую минуту (curl http://your/page.php). Единственное предостережение, что вам может понадобиться защитить вашу страницу, если она вызывается со стороны это должно быть проблемой.

...