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

Часть кода с расширенными возможностями поставляется под отдельной проприетарной лицензией Timescale (TSL), изначально не допускавшей внесение изменений, запрещавшей использование кода в сторонних продуктах и не разрешавшей бесплатное использование в облачных БД (database-as-a-service). В версии 2.0 в лицензию TSL были добавлены изменения, предоставляющие пользователям больше прав и позволяющие бесплатно использовать все возможности enterprise-версии, включая сжатие, распределение хранилища на несколько узлов и непрерывное агрегирование. В лицензии убраны ограничения области применения Community-сборки, предоставлено право на внесение улучшений и изменений, убраны платные привязки. В Community-редакцию перенесены все возможности, ранее предлагавшиеся в TimescaleDB Enterprise.

Основные изменения в TimescaleDB 2.0:

  • Предложена новая реализация непрерывно выполняемых агрегатных функций, позволяющих производить агрегирование непрерывно поступающих данных в режиме реального времени (напоминают материализированные представления PostgreSQL, но отличаются тем, что обеспечивают автоматический расчёт результатов запроса в фоновом режиме по мере поступления или изменения данных). Новая реализация примечательна изменением API, который теперь явно разделяет функции и правила агрегирования, что позволяет реализовать такие возможности как ручное обновление определённого диапазона в агрегированном представлении (например, можно автоматически материализировать свежие данные, но оставить старые исторические данные для ручного обновления). Изменения также позволят в дальнейшем реализовать поддержку распределённых операций при работе с несколькими узлами.
  • Добавлена поддержка действий, определяемых пользователем (UDA, User-Defined Action), для запуска по расписанию функций и процедур, написанных на произвольных языках (SQL, PL/pgSQL, C, PL/Python, PL/Perl). Новая возможность походит для выполнения периодических задач, которые не подпадают под имеющиеся политики подключения обработчиков (чистка устаревших данных, сжатие и непрерывное агрегирование).
  • Добавлена поддержка распределённых гипертаблиц (hypertable), позволяющих разносить хранилище на несколько узлов c TimescaleDB. Кластерная конфигурация на базе TimescaleDB включает в себя узел доступа и несколько узлов для хранения данных. Все запросы к распределённой гипертаблице направляются на узел доступа, после распределяются по узлам хранения.
  • Добавлена поддержка новых информационных представлений (Informational views), позволяющих получать сведения о гипертаблицах, узлах кластера, цепочках, политиках и расписании запуска работ.

Напомним, что СУБД TimescaleDB позволяет применять полноценные SQL-запросы для анализа накопленных данных, сочетая удобство работы, свойственное реляционным СУБД, с масштабированием и возможностями, присущими специализированным NoSQL-системам. Структура хранения оптимизирована для обеспечения высокой скорости добавления данных. Поддерживается пакетное добавления наборов данных, использование размещаемых в оперативной памяти индексов, загрузка исторических срезов задним числом, применение транзакций.

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

Для запросов секционированная БД выглядит как одна большая таблица, именуемая гипертаблицей. Гипертаблица представляет собой виртуальное представление множества отдельных таблиц, в которых накапливаются поступающие данные. Гипертаблица используется не только для запросов и добавления данных, но и для таких операций, как создание индексов и изменение структуры («ALTER TABLE»), скрывая от разработчика низкоуровневую сегментированную структуру БД. C гипертаблицей можно использовать любые агрегатные функции, подзапросы, операции слияния (JOIN) с обычными таблицами и оконные функции.