Собственно, я задумал свою базу данных для хранения динамических c временных рядов данных датчиков. Я выбрал Postgres СУБД и TimescaleDB для приема данных. У меня разные типы датчиков, и у каждого датчика разные показатели, которые он измеряет. Я привожу пример, чтобы прояснить:
- Датчик 1: измеряет значение x и значение y и значение z для каждого отметка времени
- Датчик 2: измеряет значение и значение b для каждой отметки времени
- Датчик 3: измеряет c значение для каждой временной метки
У нас есть уникальная таблица для хранения всего, что является динамическим c и в timescaleDB:
CREATE TABLE measures (
timestamp TIMESTAMP NOT NULL,
value double precision,
sensor_id INTEGER REFERENCES sensors(id),
metric TEXT; -- this metric contains what mesures each sensor
CREATE INDEX IF NOT EXISTS _index_measures ON measures (timestamp DESC, value);
SELECT create_hypertable('measures', 'timestamp');
У меня есть два варианта для этого: Вариант 1: Для датчика 1 и датчика 2 я храню следующие данные:
| Timestamp | value | ID | metric |
+------------------+-------+----+---------+
| 01/01/2020 01:00 | 5 | S1 | x value |
| 01/01/2020 01:00 | 10 | S1 | y value |
| 01/01/2020 01:00 | 1 | S1 | z value |
| 01/01/2020 01:00 | 50 | S2 | a value |
| 01/01/2020 01:00 | 10 | S2 | b value |
Для варианта 2:
Я хочу использовать hstore, чтобы сохранить только одну строку для каждой временной метки, куда я вставляю все метрики как key => value Например:
timestamp; ID; metric;
01/01/2020 01:00; S1; 'x value=>5,y value=>10, z value=>1';
.
.
.
Какой вариант, с вашей точки зрения, вы считаете оптимальным, пожалуйста?