Вы застряли в опросе с вашим текущим стеком технологий. MySQL не имеет никакого хорошего способа получить sh уведомление о том, что есть что-то новое, чтобы увидеть.
(Вы могли бы рассмотреть возможность добавления подсистемы очереди сообщений, например, RabbitMQ, но это требует больших изменений в структуре вашего приложения.)
Некоторые рекомендации по обработке опроса с наименьшей возможной стоимостью.
Установите ожидания пользователей на несколько секунд ' задержка сообщений, а не миллисекунды.
Запрашивайте столько раз, сколько необходимо для удовлетворения ожиданий задержки.
Избегайте запросов большого количества данных с помощью каждый запрос. Как вы можете это сделать?
a. Сохраняйте самую последнюю временную метку всякий раз, когда вы запускаете запрос
b. Не используйте SELECT *
. Вместо этого дайте имена столбцов, которые вам действительно нужны. Это позволяет оптимизатору MySQL снизить стоимость ваших запросов.
c. Сделайте ваши запросы SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
, так что вы будете получать только новые элементы из таблицы, по порядку. Если ваша система не очень занята, эти SELECT часто не возвращают никаких строк. Это хорошо.
d. Убедитесь, что у вас есть многоколонный индекс для отметки времени и другие столбцы в вашем операторе SELECT. Это называется индекс покрытия .
e. Сразу после открытия соединения с MySQL введите это заявление SQL. Это позволяет MySQL извлекать ваши данные с меньшим количеством конфликтов с другими MySQL клиентами, вставляющими строки в таблицу.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Если вы делаете это с AJAX из браузеры ваших пользователей, вы хотите включить в запросы AJAX последнюю отметку времени, чтобы вы могли доставлять новые необходимые элементы в браузер каждого пользователя.