Наш сайт предоставляет различные услуги передачи данных нашим клиентам; один из которых является калибровочными данными. Некоторые датчики регистрируют информацию каждые 15 минут, каждую минуту. Эти данные отправляются в нашу базу данных SQL.Лучший способ обработки графиков и отображения больших наборов данных
Все эти данные отображаются на графике (сгенерированной стороне сервера через PHP и JPGraphs), причем каждая отдельная запись в журнале отображается в виде строки в сборной таблице (jquery 1.10.2).
Когда клиент хочет просмотреть данные, они выбирают диапазон дат и какие датчики они хотели бы просмотреть. Если они хотят просмотреть последние 3 дня датчика, который регистрируется каждую минуту, он загружается довольно быстро. Если они хотят просмотреть 2 из них, то для загрузки требуется около 15-30 секунд. Реальная проблема возникает, когда они хотят просматривать данные за несколько месяцев; особенно более 1 калибра. Это может занять 15-20 минут для загрузки, и браузер неоднократно спрашивает, хотим ли мы, чтобы сценарий не заполнял сбрасываемые таблицы строк (jquery).
Очевидно, что это проблема, поскольку клиенты хотят относительно быстрого ответа (максимум 1-5 мин). В идеале мы также хотели бы получать данные калибровки с нескольких месяцев за раз. Единственный способ, которым мы можем это сделать, - это вытащить данные за 2 недели за раз и собрать вручную.
Для справки: Если бы я хотел вытащить данные за два месяца из наших калибровочных датчиков один раз в минуту, тогда через jQuery будет добавлено 86 400 строк в складную таблицу. Страница занимает ок. 5 минут для загрузки, и браузер очень медленный в течение этого периода времени.
Мой вопрос: что такое лучший способ вытащить/графа/заполнить данные с помощью сервера на базе PHP (инфраструктура Symfony 1.4) и javascript?
Должны ли мы рассмотреть возможность модернизации нашей выделенной вычислительной мощности/оперативной памяти (мы принимаем GoDaddy)? Есть ли более быстрый способ заполнения collapsibles, чем с jquery? Все наши расчеты сделаны на стороне сервера. Должны ли мы просто вытащить необработанные данные и позволить стороне клиента выполнять обработку данных? Должны ли мы разделить обработку данных между клиентом и сервером?
Вот скриншот веб-страницы. Его обрезаны так, что не отображается больше информации клиента чувствительны:
Это может не сработать для вас очень хорошо из-за того, что вам нужно также отображать графики. Тем не менее, одна вещь, которую я делал раньше всякий раз, когда мне приходилось тянуть очень большие наборы данных (миллионы строк), заключается не в том, чтобы на самом деле передать клиенту все это. Передайте только первые 200. Затем дайте возможность пользователю сделать запрос на большее количество данных. Например, что-то вроде бесконечной прокрутки. Если вы заинтересованы, я могу дать более подробный ответ. – Pompey
Если есть обработка, которая должна быть выполнена на сервере, вы можете предварительно обработать и кэшировать данные. Соединять предварительно кэшированные данные (возможно, array_merge) легко и, вероятно, намного быстрее. Кроме этого, вы можете загружать данные в куски. Разбивайте данные и/или загружайте их через ajax при прокрутке вниз. –
84'000 точек данных почти неуправляемы для тех, кто читает данные нет? вы считали, что агрегирование данных перед графическим отображением позволяет сделать набор данных немного меньшим? – Twelfth