2016-10-26 2 views
1

У меня есть MongoDB qith коллекция containng onjects какMongoDB даты и времени фильтра и агрегации

{ 
    timestamp: <unix timestamp>, 
    sensor: <string>, 
    temperatore: number 
} 

Полный стек

  • Оборудование:
    • малина пи 3
  • Бэкэнд:
    • MongoDB 2.4.16
    • nodejs 6.8.1
    • mongodn (модуль узла) 2.2.11
  • Фронтенд
    • angularjs 1.5.8
    • Highcharts 5
    • highcharts-ng 0,0.13

В моей фактической установке у меня есть запись каждую минуту, с 3 разных датчиков, поэтому 4320 записей в день. Это хорошо для графиков в течение 1 дня.

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

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

Поэтому я хотел бы получить некоторые мнения о том, как это сделать эффективно. Вероятно, какой-то сложный фильтр по вызову find(), но я не могу придумать ничего, что могло бы работать, кроме перехода на традиционную БД (PostgreSQL или Mariadb).

+0

Вы могли бы извлечь выгоду из базы данных временных рядов, как [InfluxDB] (https: //www.influxdata. com/time-series-platform/influxdb /), которые прекрасно взаимодействуют с чем угодно, включая [Grafana] (http://grafana.org/). –

+0

спасибо, O заглянет в него, я не знаю, что он существует :) –

ответ

1

Решение может состоять в том, чтобы предварительно вычислить среднюю температуру в течение часа/дня и сохранить ее в другой коллекции. Например, вы могли бы иметь 3 коллекции:

  1. Основную коллекцию со всеми записями (1-минутный интервал) на день за день графом: 4320 точек для отображения

  2. коллекции часов хранения средней температуры для каждая половину часа, в течение недели графа: 1008 точки для отображения

  3. коллекции дня хранения средней температуры на каждые 6 часов, в течение года графа: 4380 точки для отображения

, а затем запросить конкретную коллекцию в зависимости от требуемой точности.

Конечно будет немного избыточности данных, но запрос/дисплей будет намного быстрее

+0

Спасибо, я тоже думал об этом решении –

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