Открыть сервис

TimescaleDB

TimescaleDB — это реляционная система управления базами данных с открытым исходным кодом, построенная на основе PostgreSQL и оптимизированная для работы с временными рядами (time-series data). Разрабатывается и поддерживается компанией Timescale, Inc. (США). TimescaleDB расширяет возможности PostgreSQL, добавляя специализированные функции для эффективного хранения, сжатия, агрегации и анализа данных, упорядоченных по времени, при этом сохраняя полную совместимость с экосистемой PostgreSQL (SQL, индексы, транзакции, расширения).

История

Проект TimescaleDB был основан в 2015 году Аджитом Кеттлвеллом и Майклом Фридманом, которые ранее работали над системами управления данными в компании Pivotal. Первая публичная версия (0.1.0) была выпущена в 2017 году. В 2018 году проект стал доступен под лицензией Apache 2.0, что способствовало его быстрому распространению в сообществе разработчиков.

В 2020 году TimescaleDB перешёл на новую лицензионную модель: исходный код остался открытым, но использование в коммерческих целях (например, предоставление базы данных как услуги) стало регулироваться более строгой лицензией Timescale License (TSL). Это решение вызвало дискуссии в сообществе, однако не остановило развитие продукта.

В 2022 году вышла версия 2.0, в которой была полностью переработана архитектура: введена поддержка распределённых развёртываний (multi-node), улучшено сжатие данных и добавлены новые типы гипертаблиц. К 2024 году TimescaleDB является одной из наиболее популярных специализированных СУБД для временных рядов, конкурируя с InfluxDB, ClickHouse и Prometheus.

Архитектура

TimescaleDB реализована как расширение (extension) для PostgreSQL. Это означает, что она не является отдельной СУБД, а добавляет новые типы данных, функции и оптимизации поверх стандартного PostgreSQL. Основными архитектурными элементами являются:

Гипертаблицы (Hypertables)

Гипертаблица — это основная абстракция TimescaleDB для хранения временных рядов. Она представляет собой логическую таблицу, которая автоматически разбивается на множество физических фрагментов (chunks) по двум измерениям:

  • Временное измерение — по столбцу, содержащему метку времени (timestamp). Размер фрагмента по времени задаётся пользователем (например, 1 день, 1 час).
  • Пространственное измерение (опционально) — по значению одного или нескольких дополнительных столбцов (например, ID датчика, ID устройства). Это позволяет распределять данные по разным узлам в кластерной конфигурации.

Фрагменты хранятся как обычные таблицы PostgreSQL, что позволяет использовать все стандартные механизмы: индексы (B-tree, GiST, GIN), ограничения, триггеры. При этом запросы к гипертаблице выполняются как к единой таблице: TimescaleDB автоматически определяет, какие фрагменты содержат нужные данные, и обращается только к ним (pruning).

Чанки (Chunks)

Чанк — это физическая таблица, содержащая данные за определённый временной интервал (или комбинацию времени и пространственного ключа). Количество чанков в гипертаблице может достигать десятков тысяч. Каждый чанк может быть сжат, перемещён на другой диск или удалён независимо от других.

Сжатие (Compression)

TimescaleDB поддерживает нативное сжатие данных на уровне чанков. Алгоритм сжатия основан на комбинации методов:

  • Delta-of-delta — для временных меток.
  • Gorilla — для значений с плавающей точкой.
  • Dictionary encoding — для строковых и категориальных данных.
  • Run-length encoding — для повторяющихся значений.

Сжатие выполняется в фоновом режиме и может быть настроено для каждого чанка отдельно. Коэффициент сжатия обычно составляет от 5 до 20 раз в зависимости от характера данных. Сжатые данные остаются доступными для чтения и записи, но с несколько меньшей производительностью по сравнению с несжатыми.

Непрерывные агрегаты (Continuous Aggregates)

Это специализированные материализованные представления, которые автоматически обновляются по мере поступления новых данных. Они позволяют предварительно вычислять агрегатные функции (сумма, среднее, минимум, максимум, количество) за заданные временные интервалы (например, 1 минута, 1 час, 1 день). При выполнении запроса к агрегату TimescaleDB использует уже вычисленные данные, что значительно ускоряет выполнение запросов на больших объёмах данных.

Политики управления данными (Data Retention Policies)

TimescaleDB позволяет автоматически удалять старые чанки по истечении заданного срока хранения. Это упрощает управление дисковым пространством и не требует ручного вмешательства.

Основные возможности

  • Полная совместимость с PostgreSQL: поддержка SQL, транзакций (ACID), внешних ключей, индексов, хранимых процедур, расширений (PostGIS, pg_stat_statements и др.).
  • Автоматическое секционирование по времени: создание чанков происходит автоматически, без необходимости ручного управления.
  • Эффективное сжатие: снижение объёма хранимых данных в 5–20 раз.
  • Непрерывные агрегаты: ускорение запросов на больших временных диапазонах.
  • Распределённые развёртывания (multi-node): поддержка кластеров из нескольких узлов с автоматическим распределением данных.
  • Встроенные функции для временных рядов: time_bucket(), first(), last(), locf() (last observation carried forward), interpolate() и другие.
  • Интеграция с популярными инструментами: поддержка Prometheus (через адаптер), Grafana, Telegraf, Apache Kafka, Python (через psycopg2), R и других.

Применение

TimescaleDB используется в областях, где требуется хранение и анализ большого количества данных, упорядоченных по времени:

  • Мониторинг IT-инфраструктуры: сбор метрик с серверов, контейнеров, сетевых устройств (совместно с Prometheus, Grafana).
  • Интернет вещей (IoT): хранение данных с датчиков, счётчиков, умных устройств.
  • Финансовые системы: анализ котировок, транзакций, логов биржевых операций.
  • Промышленность и энергетика: мониторинг показателей оборудования, прогнозирование отказов.
  • Научные исследования: обработка данных с метеостанций, сейсмографов, телескопов.
  • Телекоммуникации: анализ трафика, логов вызовов, данных о местоположении.

Сравнение с аналогами

ХарактеристикаTimescaleDBInfluxDBClickHousePrometheus
Язык запросовSQL (PostgreSQL)InfluxQL / FluxSQL (с расширениями)PromQL
ТранзакцииACIDНетНетНет
Совместимость с PostgreSQLПолнаяНетЧастичнаяНет
Сжатие данныхДа (5–20x)Да (10–30x)Да (5–15x)Нет (зависит от хранилища)
РаспределённостьMulti-nodeClusterShardingFederation
Сложность настройкиНизкая (расширение)СредняяВысокаяСредняя
Основное применениеУниверсальное + временные рядыТолько временные рядыАналитика, OLAPМониторинг

Критика

  • Лицензионные ограничения: начиная с версии 2.0, коммерческое использование (предоставление TimescaleDB как услуги) требует приобретения платной лицензии. Это вызвало недовольство части сообщества, которое предпочитает полностью свободные лицензии (например, Apache 2.0).
  • Производительность при очень высоких нагрузках: в некоторых сценариях (миллионы записей в секунду) TimescaleDB может уступать специализированным решениям, таким как ClickHouse, которые оптимизированы для пакетной вставки и аналитики.
  • Зависимость от PostgreSQL: обновления PostgreSQL могут требовать адаптации расширения, что иногда задерживает выход новых версий TimescaleDB.
  • Сложность распределённых конфигураций: хотя multi-node поддерживается, настройка и администрирование кластера требуют больше усилий, чем в некоторых NoSQL-решениях.

Интересные факты

  • TimescaleDB используется в производственных средах таких компаний, как IBM, Siemens, Schneider Electric, Volkswagen, а также в государственных учреждениях (NASA, NOAA).
  • Проект имеет открытый исходный код на GitHub, где собрано более 18 тысяч звёзд (на 2024 год).
  • TimescaleDB поддерживает работу с данными в формате Apache Parquet через расширение pg_parquet.
  • Компания Timescale, Inc. предоставляет облачный сервис Timescale Cloud, который автоматически управляет развёртыванием и масштабированием.

Источники

  • Официальная документация TimescaleDB (docs.timescale.com)
  • Репозиторий проекта на GitHub (github.com/timescale/timescaledb)
  • Статья «TimescaleDB vs. InfluxDB: A Comparison» (Timescale Blog, 2023)
  • «Time Series Databases: New Ways to Store and Access Data» (O'Reilly Media, 2018)
  • Материалы конференций PGConf и FOSDEM (2018–2024)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →