Skip to content

Instantly share code, notes, and snippets.

@binakot
Last active September 1, 2021 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save binakot/6ede22fad2309f6017ccd8b343a08b97 to your computer and use it in GitHub Desktop.
Save binakot/6ede22fad2309f6017ccd8b343a08b97 to your computer and use it in GitHub Desktop.
Distributed TimescaleDB - RndTechConf 2021

Distributed TimescaleDB

Time-series данные в распределенном кластере TimescaleDB поверх ОРСУБД PostgreSQL

Ссылка на актуальные слайды: Google Презентация

Ссылка на PDF версию

Мои предыдущие выступления на тему TimescaleDB

Сниппет с гипертаблицей

CREATE TABLE telemetries (
    imei        TEXT                NOT NULL,
    time        TIMESTAMPTZ         NOT NULL,
    latitude    DOUBLE PRECISION    NOT NULL,
    longitude   DOUBLE PRECISION    NOT NULL,
    speed       SMALLINT            NOT NULL,
    course      SMALLINT            NOT NULL,
    CONSTRAINT telemetries_pkey PRIMARY KEY (imei, time)
);

SELECT * FROM create_hypertable (
    'telemetries', 'time',
    chunk_time_interval => INTERVAL '7 days'
);

INSERT INTO telemetries VALUES ...;

SELECT
    time_bucket('30 days', time) AS bucket,
    imei,
    avg(speed) AS avg,
    max(speed) AS max
FROM telemetries
WHERE speed > 0
GROUP BY imei, bucket
ORDER BY imei, bucket;

Сниппет с распределенной гипертаблицей

CREATE TABLE telemetries (
    imei        TEXT                NOT NULL,
    time        TIMESTAMPTZ         NOT NULL,
    latitude    DOUBLE PRECISION    NOT NULL,
    longitude   DOUBLE PRECISION    NOT NULL,
    speed       SMALLINT            NOT NULL,
    course      SMALLINT            NOT NULL,
    CONSTRAINT telemetries_pkey PRIMARY KEY (imei, time)
);

SELECT * FROM add_data_node('data_node_1', host => 'pg_data_node_1');
SELECT * FROM add_data_node('data_node_2', host => 'pg_data_node_2');
SELECT * FROM add_data_node('data_node_3', host => 'pg_data_node_3');

SELECT * FROM create_distributed_hypertable(
    'telemetries', 'time', 'imei',
    chunk_time_interval => INTERVAL '7 days'
);

INSERT INTO telemetries VALUES ...;

SELECT
    time_bucket('30 days', time) AS bucket,
    imei,
    avg(speed) AS avg, max(speed) AS max
FROM telemetries
WHERE speed > 0
GROUP BY imei, bucket
ORDER BY imei, bucket;

Полезняшки

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment