У меня есть вопрос о том, как лучше всего хранить данные датчиков, полученные, когда типы датчиков разные.
Немного предыстории:
У меня два разных датчика.
Один блок (скажем, блок типа А) имеет встроенные датчики (температура, влажность и т. д.) и создает строку CSV длиной 12 в фиксированном порядке, где все 12 значений мне пригодятся.
Другой блок (блок типа B) — это блок, в который можно подключать датчики, зажимы для контроля энергии и т. д. Во всех случаях он создает строку CSV длиной 13, но если у вас подключены только две вещи, вы получаете полезную информацию только от два из 13 значений CSV. У нас есть две разные конфигурации этого устройства, которые мы будем использовать.
Все датчики имеют идентификатор (указанный в строке CSV), я буду связывать датчик по идентификатору с комнатой, которая уже находится в базе данных (SQL 2016) через веб-интерфейс (ASP.NET).
Типы запросов, которые я буду делать: «какова текущая температура в комнате а». Мне также нужно будет запрашивать тенденции, такие как «дайте мне все комнаты со средней высокой влажностью».
Мой вопрос
Учитывая, что на данный момент у меня будет около 250 датчиков, каждый из которых будет отправлять сообщения через веб-API примерно каждые 10 секунд или около того, и в настоящее время у меня есть два разных типа строк CSV (возможно, больше в будущем), и в одном случае строка CSV будет содержать полезную информацию в другой части строки CSV, что бы вы порекомендовали в качестве подходящей структуры таблицы для поддержки этого? в идеале на SQL-сервере (может быть, в 2016 году для поддержки JSON?), поскольку SQL Server — это то, с чем я больше знаком, однако, если это плохой выбор, конечно, я открыт для ваших идей.
Я пытался избежать таблицы «по типу датчика», так как это кажется беспорядочным, а также затруднит добавление разных типов датчиков в будущем без новых таблиц и т. д.
Я подумал о том, чтобы мой API был отделен от моего веб-приложения, чтобы разместить в нем свои датчики и заставить API хранить CSV «как есть» в базе данных вместе с идентификатором «типа датчика». Затем я подумал, что смогу опубликовать обработку в пакетном режиме (какой-то сервис), используя хранимую процедуру для вставки в мою основную базу данных в пакетном режиме, поскольку я думал, что это может несколько снизить накладные расходы API.
Структура базы данных
В здании много комнат, в комнате много датчиков. Датчик имеет тип. Я буду следить за сопоставлением номеров и идентификаторов датчиков в таблице сопоставления.
Объяснение типов датчиков
Датчик типа А имеет следующую информацию:
- Дата (строка)
- Время (строка)
- ID сенсора (строка)
- Темп (десятичный)
- Влажность (десятичная)
- Количество PIR (целое число)
Датчик B поставляется в двух разных конфигурациях, в обоих случаях публикуется одна и та же строка CSV, разные значения будут использоваться из нее, но я хочу сохранить:
Конфигурация 1 (температура трубы)
- DateTime (метка времени unix)
- идентификатор датчика
- Температура трубы 1 (десятичное число)
- Температура трубы 2 (десятичное число)
Конфигурация 2 (мониторинг мощности)
- DateTime (метка времени unix)
- ID сенсора (строка)
- Степень 1 (десятичная)
- Степень 2 (десятичная)
- Степень 3 (десятичная)
- Степень 4 (десятичная)
Все датчики имеют одинаковые общие данные:
- ДатаВремя
- идентификатор датчика
Я полагаю, что одно из решений состоит в том, чтобы в комнате было много «датчиков типа A» и много датчиков типа b в конфигурации 1 и много датчиков типа b в конфигурации 2, при этом каждый тип датчика имеет свою собственную таблицу для своих данных, однако я думал, что это будет было бы здорово, если бы я мог просто иметь одну таблицу для всех датчиков в таблице датчиков и дать им тип из таблицы типов, так как это было бы более гибким при добавлении большего количества датчиков. Недостатком этого подхода является то, как я могу связать эти различные типы/формы данных датчика.
Спасибо
temperature_in_celsius
и т. д. - person Clockwork-Muse   schedule 25.10.2017