Интегрируйте hstore в timescaleDB для хранения таймсерий - PullRequest
1 голос
/ 17 июня 2020

Собственно, я задумал свою базу данных для хранения динамических 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';

.
.
.

Какой вариант, с вашей точки зрения, вы считаете оптимальным, пожалуйста?

...