|
Как выполнять расчет IoT показателей по различным иерархиям без промежуточного сохранения
|
|||
---|---|---|---|
#18+
Добрый день, Имеется объект (например, здание) который содержит набор потребителей электроэнергии (комната, лифтовое оборудование, освещение коридоров и т.д.), у большинства потребителей установлены приборы учета (ПУ) электроэнергии. Измерения выполняются 1 раз в минуту. Измеряются несколько параметров: расход электроэнергии за эту минуту, мгновенные значение тока и напряжения. Потребителей несколько сотен (300) и потенциально зданий может быть много до 10000. Как было отмечено, большинство потребителей оборудованы приборам, но есть некоторые которые не оборудованы. Например, на этаж есть приборы учета комнат и общеэтажный прибор, а освещение не оборудование и освещение можно вычислить косвенно как разность показаний этажного прибора минус сумма потребления комнат. Приборы могут "косячить" попускать данные и предоставлять данные с опозданием. Например, контроллер, который опрашивает приборы, работает корректно, но потерял связь с сервером и восстановил ее через несколько дней. Каждый прибор измерений имеет некоторое описание (метаданные): - здание (справочник, ссылка на здание) - название (= номер комнаты) - этаж (справочник этажей здания: 1,2,3-й и т.д.) - тип (справочник производственное, хозяйственное, жилое и т.д.) По каждому зданию требуются иметь следующий набор информации ( структуру потребления ): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Для хранения данных измерений, полученных от приборов учета, планируется использовать TimescaleDB или ClickHouse. Основным камнем преткновения является следующее: 1. данные "доходят", то есть могу прийти задним числом (через несколько дней от даты измерений) 2. структура потребления (правила по которым нужно выполнять анализ/визуализацию) может меряться довольно часто: несколько раз в месяц. Исходные минутные данные о потреблении (от приборов) хранятся несколько лет. Схем может быть несколько, например, группы составлены по другим признакам точек. 3. Объекты то появляются, то исчезают, точки то добавляются выходят из эксплуатации по этому нельзя использовать жесткий граф расчета при котором каждый узел знает кто в него входит. Изменений слишком много и операторы не справятся с отслеживанием корректности структуры потребления (будут не забывать добавлять/удалять). В чем вопрос? - Есть ли устоявшаяся best practice для решения подобного рода задач? - Можно ли придумать решение такое, чтобы при отображения данных по структуре потребления объекта (за год с разбивкой по месяцам) так, чтобы не нужно было пересчитывать (сохранять в БД), а так чтобы расчет выполнялся "налету" по запросу с уровня приложений? - Если перенести логику вычислений на приложение (в некий сервис getData) и вычислять все "налету" полагаясь при этом на возможности СУБД - на агрегацию (свертку) данных с минутных значений до месячных в рамках запросов - на сколько велика будет деградация производительности в далекой перспективе? - На сколько утопична идея реализации выполнения «налету»? - При необходимости выполнить сравнительный анализ объектов по показателю "удельное потребеление ЭЭ на комнату" пользователю требуется вывести результаты в таблице на странице (или отчете) и чтобы ее сформировать придется либо выполнить запрос в предрасчитанные данные (будет быстро) либо выполнить N запросов по каждому объекту для формирования единого списка... Как лучше выполнить реализацию для такого анализа? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2020, 10:32 |
|
Как выполнять расчет IoT показателей по различным иерархиям без промежуточного сохранения
|
|||
---|---|---|---|
#18+
askabout Есть ли устоявшаяся best practice для решения подобного рода задач Под такое есть как минимум time series бд. askabout Можно ли придумать решение такое На промежуточном ПО можно всё. Благословляю. askabout на сколько велика будет деградация производительности в далекой перспективе Hashmap жабки будет работать быстрее, чем любая субд, потому что там тормозить нечему. Тут вопрос сохранности и консистентности, а не производительности. askabout На сколько утопична идея реализации выполнения «налету» Нормальная идея. Рассовываешь по удобным для тебя структурам, да суммируешь. Параллельно скидываешь в базу. Иногда проверяешь, чтобы всё сходилось. askabout Как лучше выполнить реализацию для такого анализа? Делай всё на приложении + база, как хранилище. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2020, 11:03 |
|
Как выполнять расчет IoT показателей по различным иерархиям без промежуточного сохранения
|
|||
---|---|---|---|
#18+
askabout, пока звучит как стандартная задачка под реалтайм аналитику. обычно такое строят с писаниной с клиентов в очередь, типа kafka, а из кафки читают чем-то типа spark на кластере. спарк (spark streaming) на лету показатели агрегирует и держит сколько возможно в памяти. дальше агрегаты пишутся в какой-нить подходящий сторидж. как я понимаю у спарка есть конектор к ClickHouse. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2020, 11:00 |
|
Как выполнять расчет IoT показателей по различным иерархиям без промежуточного сохранения
|
|||
---|---|---|---|
#18+
H5N1, Спасибо, за наводку про Apache Spark! Действительно мощная штука, еще не смотрели плотно в ее сторону. С первого взгляда это монструозная, замкнутая эко система для выполнения расчетов и анализа в распределённом режиме, то есть некая вещь в себе, так что к ней можно обращаться с конкретным вопросом, но не как СУБД (могу ошибаться). У нас часто с данными работают аналитики, которые желают джойнить оперативные данные с мастер-данными для их насыщения, а в идеале работать например с месячными значениями (собранными из секундных интервалов), но так чтобы не заботиться о том чтобы эти свертки (из секунд в месяцы) обслуживать нашим кодом. Поэтому использование сервисов к которым можно задавать вопросы, но нельзя джойнить мастер-данные (тот же clickhouse) сейчас рассматриваются в меньшем приоритете (пока есть надежда найти решение с джойнами). Процесс обработки исходных данных (теоритически) сейчас выглядит примерно так:
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2020, 15:38 |
|
Как выполнять расчет IoT показателей по различным иерархиям без промежуточного сохранения
|
|||
---|---|---|---|
#18+
askabout, у меня есть опыт с хадупом и spark, потому мне было много проще на этом стеке и собрать. что-то типа такого https://databricks.com/blog/2017/04/26/processing-data-in-apache-kafka-with-structured-streaming-in-apache-spark-2-2.html т.е. клиенты пишут в кафку, спарк читает из кафки, пишет на hdfs в файлики parquet по сути сырые сообщения. кроме этого агригирует и записывает назад в кафку агрегацию, допустим за месяц. месячные агрегации думаю смело можно писать в mysql и показывать в вебе. для аналитиков я бы нарисовал обычные ETL, которые из сырых parquet в стиле бигдаты строят витрины с нужным разрезом. данных не столь много, в parquet это будет занимать копейки. аналитики эти витрины джойнят с чем хотят в облаке или хадупе (hive+spark или Impala). я бы на вашем месте нанял бы спеца на прототип. по идеи там должно быть скачать виртуалку хадупа, несколько строк в spark, на пару дней работы. т.е. должно все быть дешево и посмотреть прототип можно за копейки. ну а дальше решать, готовы ли вы погружатся в волшебный мир хадупа или проще что-то готовое в облаке взять ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2020, 16:55 |
|
Как выполнять расчет IoT показателей по различным иерархиям без промежуточного сохранения
|
|||
---|---|---|---|
#18+
askabout, А чем Вас TimescaleDB не устраивает, для агрегаций можно использовать PipelineDB? статья с хабра Там вроде тоже бигдата и все успешно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 23:27 |
|
|
start [/forum/topic.php?fid=32&msg=39916687&tid=1539878]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 392ms |
0 / 0 |