2013-10-25 2 views
1

Наш сайт предоставляет различные услуги передачи данных нашим клиентам; один из которых является калибровочными данными. Некоторые датчики регистрируют информацию каждые 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? Все наши расчеты сделаны на стороне сервера. Должны ли мы просто вытащить необработанные данные и позволить стороне клиента выполнять обработку данных? Должны ли мы разделить обработку данных между клиентом и сервером?

Вот скриншот веб-страницы. Его обрезаны так, что не отображается больше информации клиента чувствительны:

enter image description here

+1

Это может не сработать для вас очень хорошо из-за того, что вам нужно также отображать графики. Тем не менее, одна вещь, которую я делал раньше всякий раз, когда мне приходилось тянуть очень большие наборы данных (миллионы строк), заключается не в том, чтобы на самом деле передать клиенту все это. Передайте только первые 200. Затем дайте возможность пользователю сделать запрос на большее количество данных. Например, что-то вроде бесконечной прокрутки. Если вы заинтересованы, я могу дать более подробный ответ. – Pompey

+0

Если есть обработка, которая должна быть выполнена на сервере, вы можете предварительно обработать и кэшировать данные. Соединять предварительно кэшированные данные (возможно, array_merge) легко и, вероятно, намного быстрее. Кроме этого, вы можете загружать данные в куски. Разбивайте данные и/или загружайте их через ajax при прокрутке вниз. –

+0

84'000 точек данных почти неуправляемы для тех, кто читает данные нет? вы считали, что агрегирование данных перед графическим отображением позволяет сделать набор данных немного меньшим? – Twelfth

ответ

1

В ответ на мой комментарий.

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

Вместо этого отправьте небольшую порцию клиенту. Скажем, первые 200 результатов. Затем вы можете продолжить и кэшировать остальную часть набора результатов в файл JSON (база данных Lite, что бы вы ни захотели). Затем создайте интерфейс, в котором пользователь может запросить дополнительные данные. Бесконечный свиток хорош, но имеет свои проблемы. Может быть, просто кнопка, которая говорит, загружает больше данных. Поскольку люди говорили, что что-то большее, чем несколько сотен точек данных в таблице в одно время, сумасшедшие, потому что люди не будут смотреть на это в любом случае. Затем, когда они нажимают кнопку, чтобы получить больше данных, вы отправляете на сервер запрос AJAX с правильными параметрами для данных, которые вы хотите.

Например, при первом щелчке getMoreData() вы хотите получить следующие 200 точек данных. Поэтому вы отправляете getMoreData (start = 200, length = 200). Ваш сервер подбирает запрос AJAX и находит правильные данные в файле JSON или в базе данных Lite, где бы вы не кэшировали результаты. И пользователь может продолжать запрашивать больше данных (убедитесь, что вы обновили свой начальный параметр), и вы только когда-либо возвращаете небольшое подмножество.Пользователь даже не понимает, что перед ними нет всего набора данных, потому что похоже, что они делают.

Сложность в этом заключается в сортировке и поиске. Если вы хотите их реализовать, вам необходимо убедиться, что вы переходите на серверную сторону и сортируете/просматриваете результаты кэширования.

Итак, у вас есть система, в которой вы можете создать весь график на стороне сервера, который не займет много времени. Что займет много времени, так это загрузка всего набора данных на клиентскую сторону. Таким образом, вы разбиваете это на мелкие куски. Вы можете даже легко создать разбивку на страницы и таковую с помощью этого метода.

+0

именно то, что мне нужно. Благодаря! – user2920960

Смежные вопросы