Слушатель изменения значения базы данных PHP, есть ли лучший способ? - PullRequest
1 голос
/ 02 апреля 2011

Наша компания занимается продажами. Мы получаем заказы, и наше приложение PHP позволяет нашим CSR обрабатывать эти заказы.

В базе данных есть запись, которая постоянно меняется в зависимости от того, какой заказ в данный момент обрабатывается конкретным CSR - для каждого CSR есть одно из этих полей.

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

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

У меня вопрос, есть ли лучший способ сделать это? Возможно, слушатель использует сокеты? Что-то, что могло бы пропинговать мой скрипт, когда изменение было выполнено, не заставляя меня опрашивать базу данных и / или отправлять http-запрос.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

Во-первых, 1 запрос в секунду и 1 запрос в секунду действительно не много. Тем более что это число не изменится, когда вы получите больше CSR или продаж. Если бы вы выполняли 1 запрос / порядок / секунду или что-то еще, вам, возможно, пришлось бы беспокоиться, но в настоящее время, если это работает хорошо, я, вероятно, не изменил бы это. Возможно, стоит выполнить некоторые метрики для запроса, чтобы убедиться, что он выполняется быстро, выбирая индексированный столбец и тому подобное. Большинство баз данных предлагают способ проверки выполнения запроса, например, синтаксис EXPLAIN в MySQL.

Тем не менее, есть несколько вариантов.

  • Используйте триггеры базы данных для выполнения необходимых обновлений при редактировании или для вызова внешнего скрипта. Некоторые справочные материалы по MySQL: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
  • При наличии любого программного обеспечения, которое используют CSR, вызывайте второй сценарий непосредственно при обновлении.
  • Уменьшить частоту опроса.
0 голосов
/ 02 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...