Как структурировать данные датчика в SQL? - PullRequest
0 голосов
/ 31 августа 2018

Я хочу сохранить данные датчиков с нескольких метеостанций в базе данных SQL, чтобы их можно было просматривать через веб-страницу django.

Для простоты объяснения я каждые несколько минут считываю несколько датчиков (значения bool и float) с каждой метеостанции. Я также хочу сохранить отметку времени каждого чтения.

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

1 Ответ

0 голосов
/ 31 августа 2018

Для начала вы можете иметь 2 таблицы - stations и readings.

Таблица stations имеет поле идентификатора с автоматическим приращением и любую другую информацию о станциях, которые вам нужны / есть. E.g.:

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '0',
`lat` DOUBLE NOT NULL DEFAULT '0',
`lng` DOUBLE NOT NULL DEFAULT '0',
...other things
PRIMARY KEY (`id`)

Таблица readings содержит записи для одного отчета от станции в данный момент времени (я предполагаю, что значения будут усреднены за несколько минут):

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`time` TIMESTAMP NOT NULL,
`id_station` INT NOT NULL,
`temp` DOUBLE NULL,
`humidity` DOUBLE NULL,
`wind_speed` DOUBLE NULL,
`wind_dir` DOUBLE NULL,
`pressure` DOUBLE NULL,
`squirrel_count` DOUBLE NULL,
... other things 
PRIMARY KEY (`id`),
INDEX `time` (`time`),
INDEX `id_station` (`id_station`)

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

E.g: один раз в день сценарий / процедура SQL запускает запрос, который объединяет данные за предыдущий день и вставляет их в другую таблицу. Вторая таблица будет почти такой же, как 1-я, за исключением того, что она будет содержать только среднесуточные значения (вместо нескольких минут).

Вы можете использовать предварительную агрегацию для создания нескольких таблиц с разной степенью детализации (ежечасно, ежедневно, еженедельно ...), необходимой для ваших отчетов. Сколько и сколько вам понадобится, зависит от того, насколько быстро вы хотите, чтобы оно работало, и от того, какое у вас оборудование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...