TimescaleDB непрерывные агрегаты и Postgis - PullRequest
2 голосов
/ 06 мая 2020

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

Входные данные : пакеты по 10 миллионов строк в день с меткой времени, идентификатором человека, и местоположение Postgis. Предположим, это представляет людей в определенные c моменты времени.

Выводит : центроид положения каждого человека каждый день.

Мое первоначальное решение было:

1 гипертаблица для ввода

CREATE TABLE datapoints(
    person_id char(40),
    timestamp TIMESTAMPTZ NOT NULL,
    location geometry(point, 4326)
);

SELECT create_hypertable('datapoints', 'timestamp', chunk_time_interval => INTERVAL '1 day');

1 непрерывный агрегат с использованием ST_Centroid

CREATE VIEW daily_centroid WITH
(timescaledb.continuous, timescaledb.refresh_interval = '1 day')
AS
SELECT
    person_id,
    time_bucket(INTERVAL '1 day', timestamp) as date,
    ST_Centroid(ST_Collect(location)) AS user_centroid
FROM datapoints
GROUP BY person_id, time_bucket(INTERVAL '1 day', timestamp);

Однако выполнение этого приводит к ошибке

ERROR:  aggregates which are not parallelizable are not supported by continuous aggregate query

Я неправильно оцениваю TimescaleDB как подходящую для этого? Если это не сработает, я думаю, что напишу несколько сценариев:

  • для создания одной таблицы в день для ввода
  • для создания одного материализованного представления в день с помощью всего лишь (person_id, centroid)
  • для импорта данных в соответствующую таблицу
  • для обновления sh материализованных представлений

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

Могут ли триггеры быть лучшей альтернативой для прозрачной реализации этой автоматизации, если это не соответствует области TimescaleDB?

Спасибо !!

...