Производительность MySQL COUNT по сравнению с объектами / массивом JavaScript - PullRequest
2 голосов
/ 11 октября 2011

У меня есть видео длиной десять минут, где люди могут остановить его и оставить комментарии. Время (в секундах) и комментарий сохраняются в базе данных. Там может быть несколько комментариев в одну секунду.

При наличии комментария, доступного для просмотра, отображается значок. Я использую 10-секундное окно, поэтому комментарий, оставленный через 8 секунд, будет доступен через 3 - 13 секунд.

В настоящее время я опрашиваю базу данных каждые 2 секунды с помощью

SELECT COUNT(*) AS count FROM comments WHERE time BETWEEN $time-5 AND $time+5

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

Было бы лучше - с точки зрения производительности - получить все комментарии в начале, создать какой-нибудь объект или массив javascript и выполнить итерации по объектам с помощью специального метода между ними?

Я знаю, что это зависит от количества комментариев, с которыми я работаю, но я не хочу испытывать трудности при создании решения javascript и выполнении тестов производительности, если запросы MySQL COUNT несущественны.

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Этот MySql-запрос будет очень быстрым, но помните, что в целом запросы к серверу выполняются намного медленнее, чем все, что выполняется на стороне клиента.Сначала я бы сохранил все комментарии в массиве JavaScript (как вы предлагаете), а затем опросил массив.Это сохраняет всю обработку на клиенте.Это будет особенно полезно в случае, если ваш сервер по какой-либо причине работает медленно в этот день.

РЕДАКТИРОВАТЬ : В ответ на действительный комментарий Ника, я полагаю, что ответ зависит от того, какЕсть много комментариев.Если есть нагрузки (тысячи?) И вы ожидаете, что новые комментарии будут публиковаться каждые несколько минут, лучше продолжать опрашивать сервер.

1 голос
/ 11 октября 2011

Я бы выбрал в комментариях только идентификатор + метку времени, а затем либо сам загружал комментарии о действиях пользователя (щелчок, наведение), либо просто загружал комментарии по мере продвижения фильма.Это лучше, чем запрашивать базу данных каждую секунду / две секунды, потому что HTTP-запросы, как правило, довольно медленные по сравнению с вычислениями в памяти.Я думаю, что это также лучше, чем загрузка комментариев сразу, потому что загрузка данных комментариев, вероятно, замедлит первоначальный запрос, и, вероятно, в большинстве случаев вам даже не нужны эти комментарии.Недостатком является то, что пользователь никогда не увидит комментарии, которые были добавлены после начальной загрузки, но я думаю, что это довольно маленькая проблема.

1 голос
/ 11 октября 2011

Я бы подумал, что это будет больше в зависимости от количества посещений сайта - чем больше посещений страницы, тем больше этих подсчетов вы собираетесь запустить.

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

Только моя ценность на сумму ...

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