Перейти к содержанию

TimescaleDB

Раздел 02 · Механизмы · Сравнения

Тип материала: архитектурный разбор. Схемы и примеры иллюстративные, если не указано иное.

Область версий: TimescaleDB 2.20.x на PostgreSQL 17; self-hosted, функции зависят от edition. Проверка источников: 2026-11-02.

1. Архитектура и модель данных

FACT. PostgreSQL extension организует time-series в hypertables/chunks и добавляет continuous aggregates/columnstore facilities. Это наследование PostgreSQL transaction model в поддерживаемой комбинации версий, а не новая generic distributed database.

flowchart LR
  Insert --> Hypertable
  Hypertable --> Chunks[Time chunks]
  Chunks --> WAL[PostgreSQL WAL]
  Chunks --> Refresh[Aggregate refresh job]
  Refresh --> Aggregate[Continuous aggregate]

2. Физическое хранение и путь записи

Hypertable маршрутизирует строки по time dimension в chunks; rowstore сохраняет PG tuples/WAL. Columnstore/compression перестраивает представление старых chunks по собственным settings и edition. В 2.20 используются новые APIs/названия; старые примеры compression нельзя смешивать с текущими cloud-only defaults.

Источники механизма: документация 1, документация 4.

3. Индексы и путь чтения

Индексы существуют на chunks и подчиняются PostgreSQL access methods. Time range обеспечивает chunk exclusion; без time predicate можно обойти много chunks. Segment/order configuration для columnstore определяет pruning/compression. Unique index на hypertable должен включать все partitioning columns.

Источники механизма: документация 1.

4. Транзакции и consistency guarantees

Локальные транзакции и isolation основаны на PostgreSQL; DML/continuous refresh и background jobs — разные transaction boundaries. Continuous aggregate не становится немедленно полной копией raw data: refresh window, watermark и real-time aggregation setting определяют видимость. Default real-time mode зависит от версии — задавать явно.

Источники механизма: документация 2.

5. Репликация, partitioning и sharding

Обычный self-hosted instance использует PostgreSQL replication; chunks не являются удалёнными shards автоматически. Историческую возможность distributed hypertables нельзя выдавать за гарантированную функцию выбранного 2.20 baseline. Managed services и deprecated multi-node функции рассматриваются отдельно.

Источники механизма: документация 4.

6. Конкурентная запись и конфликты

Concurrent inserts в активные chunks используют PG locks/MVCC. Late data и исправления попадают в старые ranges и требуют refresh aggregate; columnstore updates могут потребовать дополнительной работы/совместимости API. Idempotency uniqueness должна включать time partition key или обеспечиваться отдельным реестром.

Источники механизма: документация 1, документация 2.

7. Отказы и восстановление

Base backup/WAL restore охватывает PostgreSQL, extension metadata и jobs в совместимой версии. После restore проверить chunk catalog, aggregate refresh status и job scheduling. Удалённый retention chunk нельзя восстановить из replica, повторившей drop; нужен backup/raw archive.

Источники механизма: документация 4.

8. Масштабирование и ограничения

Chunk interval выбирают по active indexes, ingest rate, query range и lifecycle. Слишком мелкие chunks повышают planning/catalog costs, слишком крупные увеличивают maintenance и активный working set. Hot tenant/time может потребовать дополнительного model design, а не произвольного числа dimensions.

9. Performance trade-offs

Continuous aggregates уменьшают повторный scan ценой refresh/invalidations. Retention raw и aggregate window должны быть согласованы: refresh удалённого raw диапазона может убрать ранее рассчитанные агрегаты. Columnstore экономит bytes, но добавляет rewrite/late-update cost.

10. Мониторинг и эксплуатация

PG metrics плюс timescaledb_information.hypertables/chunks/jobs/job_stats и continuous aggregate views. Следить за failed jobs, refresh lag, old chunks, размером active indexes и WAL. Lifecycle порядок compression/retention/refresh проверять на копии с late data.

11. Сценарии FinTech и iGaming

INFERENCE. Time-series платежной telemetry, odds measurements и operational counters с SQL joins. Authoritative ledger может сосуществовать в PG, но time-series retention не должна удалять audit. High-cardinality player dimensions оценивать по index/aggregate costs.

12. Когда не выбирать

Не выбирать как автоматический global sharding слой. Не использовать continuous aggregates без явного lateness/refresh contract. Если нужен только разовый локальный Parquet analysis, отдельная always-on база может быть излишней.

13. Вопросы на собеседовании

Почему unique event_id недостаточен на hypertable? Уникальность должна учитывать все partitioning columns; global dedup требует отдельного решения.

Почему aggregate не исправился после late insert? Диапазон мог не попасть в refresh policy.

Retention raw безопасен для aggregates? Только при согласованной refresh/retention политике и проверенной семантике.

14. Практические SQL/config примеры

CREATE TABLE telemetry (
  ts timestamptz NOT NULL, tenant_id bigint NOT NULL,
  event_id uuid NOT NULL, value double precision NOT NULL,
  PRIMARY KEY (ts, tenant_id, event_id)
);
SELECT create_hypertable('telemetry', by_range('ts'));

Extension устанавливается отдельно. PG syntax parsed; наличие/сигнатура TimescaleDB функций runtime не проверены. Выбран совместимый API создания hypertable, без cloud-only DDL.

15. Дополнительные источники

Типичные ошибки проектирования

Смешивать commit, видимость projection и backup; приписывать формату функции query engine; игнорировать версии и cleanup horizon. Product-specific ошибки и безопасные альтернативы разобраны в разделах 4–9.

Практические упражнения

Составьте журнал одной записи: какие файлы/metadata появляются до публикации, что увидит reader при сбое и какой cleanup безопасен. Затем предложите restore drill с проверкой итоговой полноты, включая поздние исправления.