Я пытаюсь придумать дизайн базы данных, и я не могу обдумать правильную настройку. Учитывая мои требования, я подумал о 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?
Спасибо !!