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

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

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

Для этого в настоящее время эти два варианта пузырятся в моей голове.

  1. MySql / Амазонка Аврора
  2. Файловая система

Какой из этих вариантов будет лучше? Или любое другое решение?

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

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

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

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

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


person Piyush    schedule 29.07.2016    source источник


Ответы (1)


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

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

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

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

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

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

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

  2. Обновить время последнего обновления для клиентов в кэше памяти

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

Уровень 2:

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

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

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

person Eckd    schedule 22.08.2016
comment
Да, Memcache — хорошая идея. Я проверяю, как сделать то же самое с помощью websocket. Но в websocket для меня сложной задачей является проверка максимального количества подключений, которые можно подключить одновременно. - person Piyush; 05.10.2016