Лучший способ хранения реальных событий в БД?

Я строю систему, которая будет собирать данные о производственном процессе, который контролируется извне. Эти данные будут использоваться для построения статистики использования для различных компонентов системы.

Упрощенный пример: есть обогреватель, который включается и выключается, и я получаю уведомление, когда это происходит. Мне нужно записать это, и на основе этих данных я смогу ответить на такие вопросы, как "Сколько времени нагреватель работал в прошлом месяце?"

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

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

Вопрос: есть ли более подходящий, более эффективный "шаблон хранения", который я здесь опишу?

Благодарю.

2 ответа

Решение

Вы можете хранить время включения нагревателя, а не отдельные события включения / выключения. использование time_on а также time_off столбцы, чтобы отслеживать, когда нагреватель был включен и выключен соответственно, а затем вычесть time_on от time_off чтобы получить продолжительность.

Когда обогреватель включен:

insert into heater_usage (time_on, time_off) values (now(), null);

Когда обогреватель выключен:

update heater_usage set time_off = now() where time_off is null;

Используйте уникальные ограничения, чтобы не иметь двух строк null за time_off, в качестве основной проверки, чтобы убедиться, что вы не оставляете "висящие" записи без time_off если ваш скрипт не вызывается должным образом. Вы можете проверить их, когда нагреватель включен, и удалить их.

Для суммирования общего времени:

select sum(time_off - time_on) from heater_usage;

Я не думаю, что вы предоставили достаточно информации, чтобы предложить проект.

Я уверен, что вы храните более одного типа событий; это немного, или это очень большое количество.

насколько различны данные, которые нужно хранить для каждого типа событий?

как часто нужно будет менять эту систему? Вам придется редактировать или добавлять типы событий регулярно или редко?

Это система, которая должна быть гибкой к типу данных, которые генерирует событие?

Тем не менее, у вас фактически есть два основных типа возможностей дизайна:

создайте уникальную таблицу для каждого типа события, которая явно захватывает данные для типа события, ИЛИ создайте ограниченное количество таблиц, которые могут хранить данные для многих типов событий, имеющих столбец, содержащий xml, или сериализованные данные некоторой формы.

первое менее гибкое, второе требует большей постобработки.

Другие вопросы по тегам