Показывать данные в реальном времени пользователям с одинаковым временем отклика

Я сомневаюсь в скорости и задержке показа данных в реальном времени.

Давайте предположим, что я хочу показывать пользователям данные о времени чтения с помощью ajax-запросов каждую секунду, которые получают данные из таблицы MySql простым запросом сбора данных.

Для этого в настоящее время эти два варианта бурлят в моей голове

  1. MySql / Amazon Aurora
  2. Файловая система

Среди этих вариантов, которые были бы лучше? Или любое другое решение?

Как я практически проверил, если мы откроем одну страницу в браузере, то ajax-запросы дают ответ менее чем 500ms с помощью PHP, MySql, Nginx стек.

Но если мы откроем больше страниц, то те же самые запросы AJAX дают ответ более чем 1 second это должно быть меньше чем 500ms для каждого посетителя.

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

Я также проверил с Node.js+MySql но результат тот же.

Это хорошо для создания json файлы для записи и извлечения данных из файла? Или любое другое решение?

0

Решение

Действительно, вам нужно использовать базу данных для хранения фактических данных, но вы можете легко добавить кэш памяти (это может быть внутренний словарь или отдельный компонент) для отслеживания актуальных обновлений.

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

  1. Memcache, у нас есть что-нибудь новое для пользователя 123?

  2. Последнее обновление было сделано 10 минут назад

  3. ага, так что ничего нового, давайте вернем null;

Когда вы пишете данные:

  1. Поместить данные в базу данных

  2. Обновление времени последнего обновления для клиентов в memcache

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

Уровень 2:

Вы сожжете свой веб-сервер, а также клиентский интернет с большим количеством звонков. Вы можете сделать что-то:

DateTime start = DateTime.Now;
while(Now.Subtract(30 seconds) < start)
{
if (hasUpdates) return updates;
sleep(100);
}

Затем клиент будет вызывать сервер 1 раз в 30 секунд.
Клиент получит ответ немедленно, когда сервер заметит новые данные.

0

Другие решения

Других решений пока нет …