Мне нужен совет по производительности …
У нас есть долго работающий PHP-скрипт (который может занять более 10 минут) с обновлениями прогресса, которые возвращаются к пользовательскому интерфейсу через отправленные сервером события. http://www.html5rocks.com/en/tutorials/eventsource/basics/
Все работает нормально, но я беспокоюсь о том, как это забьет БД.
Грубый поток — это;
1) Пользователь переходит на страницу публикации приложения.
2) Пользовательский интерфейс открывает поток EventSource для сценария php, который отслеживает
Выполняется публикация, и, если это так, сообщает о событиях прогресса — проверяет каждый
второй.3) Если пользователь инициирует публикацию, он запускает Ajax-вызов
работает скрипт php.4) EventSource затем сообщит о событиях для этой публикации.
Мониторинг осуществляется путем сохранения прогресса в таблице MySQL.
Длительный скрипт записывает прогресс в БД, а скрипт Event проверяет это каждую секунду.
Как я уже сказал, все это работает, за исключением того, что каждую секунду он попадает в базу данных для поиска — для каждой открытой страницы на странице публикации.
Это низкочастотное приложение (на данный момент меньше 100 — но это может увеличиться), низкочастотное приложение, поэтому вряд ли на этой странице будет больше, чем полная рука, но все же — это не займет много.
На данный момент все это размещено на AWS — микро БД.
Итак, я полагаю, мои вопросы
1) Удар по БД каждую секунду для каждой сессии публикации страницы — это
плохой? я должен беспокоиться?2) Какие есть альтернативы попаданию в БД — вместо этого пишите в файл или память?
(плохо, если мы когда-нибудь загрузим баланс)3) Нет способа получить уведомление о событии PHP, когда mySQL
обновления таблицы есть?
Если я увеличу его до более чем секунды, прогресс пользовательского интерфейса будет довольно слабым (пропускает слишком много информации).
Я мог бы динамически изменить время обновления. Каждую секунду, когда идет публикация, опускайтесь до каждых 5 или 10, когда нет?
Переписывание в Node или использование отдельного сервера уведомлений на самом деле не вариант — я просто хочу простые события прогресса для долго работающего скрипта !!
Любой совет высоко ценится.
м
1) Удар по БД каждую секунду для каждой сессии публикации страницы — это плохо? я должен беспокоиться?
Вероятно, это быстро убьет вашу БД, если ваша пользовательская база будет расти.
2) Какие есть альтернативы попаданию в БД — вместо этого пишите в файл или память? (плохо, если мы когда-нибудь загрузим баланс)
Файл будет проще всего. Хотя вы могли бы потенциально использовать SQLite и вывести свою основную базу данных из уравнения для этой конкретной проблемы.
3) Нет способа получить уведомление о событии PHP, когда происходит обновление таблицы MySQL?
Конечно, окольным путем. Пусть сценарий событий прослушивает изменения в файле кэша, который записывается при каждом обновлении базы данных MySQL.
Других решений пока нет …