В настоящее время я наблюдаю за 5 различными зданиями, на каждое здание приходится около 300 комнат. В каждой комнате есть 4 датчика, три из которых отслеживают температуру в разных точках комнаты, а один — на количество энергии (киловатт), которое потребляет комната.
В настоящее время я опрашиваю каждый датчик каждые 15 минут, который производит 576 000 записей в день, количество зданий, которые я наблюдаю, скоро увеличится.
В настоящее время я храню всю информацию в MySQL, у меня есть таблица MySQL для каждого типа датчика, поэтому таблицы называются «power», «temp1», «temp2», «temp3». Столбцы в этих таблицах: «id», «building_id», «epoch», «value».
Затем я использую эти данные для создания графиков с использованием библиотеки Chart.js и статистики, такой как количество энергии, используемой на здание в течение определенного периода времени и т. Д., Я делаю все это с помощью PHP.
Я не верю, что моя база данных MySQL сможет справиться с этим без серьезного масштабирования и кластеризации.
Мне нужно иметь возможность просматривать исторические данные в течение 5 лет, хотя некоторая степень детализации может быть потеряна через определенный промежуток времени.
Мне сообщили, что RRD может решить мою проблему, и я провел некоторые исследования по ней, но у меня все еще есть некоторые вопросы.
Позволит ли это мне создавать свои собственные графики, используя библиотеку Chart.js? Если я могу получить данные времени / значения JSON из RRD, это должно быть в порядке.
Сколько разных файлов RRD мне нужно будет создать? Нужен ли мне один на здание? За номер? На датчик? Это все еще будет легко управлять.
У меня есть PHP-скрипты, которые запускаются с 15-минутными интервалами, которые извлекают данные из датчиков с использованием SNMP, а затем вставляют данные в MySQL, если я могу использовать те же скрипты для вставки в RRD, что также было бы замечательно, из того, что я видел Вы можете использовать PHP для вставки в RRD, так что все должно быть в порядке.
РЕДАКТИРОВАТЬ: я сейчас читаю http://michael.bouvy.net/blog/en/2013/04/28/graph-data-rrdtool-sensors-arduino/ который начал отвечать на некоторые мои вопросы.
Есть ли у вас один файл RRD с 6000 метриками или 5 файлов с 1200 метриками и т. Д., Зависит от того, как вы управляете данными.
Во-первых, вы не должны группировать метрики, для которых выборки поступают в разные моменты времени. Таким образом, если вы выбираете одну комнату за раз, у вас, вероятно, должен быть один файл RRD на комнату (с 4 метриками в нем). Это будет зависеть от того, что управляет вашими датчиками; если у вас есть одно устройство на комнату или на здание. Извлечение данных и их построение графиков работает независимо от того, есть ли у вас один файл или тысяча (хотя сценарий «тысяча» в последней версии RRDTool работает намного лучше).
Во-вторых, можете ли вы добавить новые точки данных (например, здания или комнаты)? Вы не можете (легко) добавить новые метрики в существующий файл RRD. Таким образом, если вы планируете добавить новое здание в будущем или добавить или убрать комнату, то, возможно, будет лучше один RRD на здание или один на комнату.
Не имея больше информации, я бы предположил, что вам лучше использовать один RRD на комнату (содержащий 4 метрики) и обновлять их отдельно. Назовите файлы в соответствии с идентификаторами здания и комнаты, и они могут содержать значения мощности и 3 температуры в соответствии с эпохой.
Для построения графиков RRDTool, конечно, способен создавать свои собственные графики, напрямую обращаясь к данным. Однако, если вы хотите извлечь данные и поместить их в график самостоятельно, это возможно; функция Xport позволит вам извлечь необходимые точки данных (возможно, из нескольких RRD-файлов и с агрегацией), которые вы затем сможете передать в выбранную вами графическую библиотеку. Существует также функция Fetch, если вы хотите необработанные данные.
Если ваши образцы данных поступают с 15-минутными интервалами, убедитесь, что вы правильно настроили интервал RRD, Heartbeat и RRA. В частности, в RRA будет указано, какое агрегирование выполняется и как долго данные хранятся с более высокой степенью детализации. RRA должны в целом соответствовать разрешениям, на которые вы рассчитываете представить данные (поэтому люди обычно используют 5 минут / 30 минут / 2 часа / 1 день, поскольку они хорошо соответствуют дневным, недельным, ежемесячным и годовым графикам с шириной 400 пикселей)
Возможно, вы захотите взглянуть на базы данных временных рядов и протестировать несколько систем, имеющих встроенную визуализацию, API, который позволяет выполнять агрегацию и PHP-оболочки. Базы данных временных рядов оптимизированы для эффективного хранения данных с метками времени и имеют встроенные функции для преобразования временных рядов.