Архитектура данных в TSDB-решениях для анализа временных рядов

архитектура больших данных, TSDB Time Series DataBase базы данных временных рядов, NoSQL для анализа данных временных рядов, обучение Data Science примеры курсы обучение, NoSQL базы данных временных рядов анализ данных примеры курсы обучение, администратор дата-инженер архитектор больших данных примеры курсы обучение, Школа Больших Данных Учебный Центр Коммерсант

Чем базы данных временных рядов отличаются от реляционных и key-value хранилищ, какова модель данных для хранения метрик, значения которых меняются во времени, какие решения этой категории NoSQL-СУБД сегодня популярны на рынке и для чего они используются.

Что такое база данных временных рядов и где она используется

Как и следует из названия, база данных временных рядов (TSDB, Time Series DataBase) — это база данных, оптимизированная для временных рядов – данных с отметками времени, которые представляют собой измерения или события, например, системные или сетевые метрики, показатели IoT-устройств, колебания валюты и пр. Будучи изначально созданной для данных с такой природой, TSDB оптимизирована для именно таких рабочих нагрузок: агрегации и сканирования большого диапазона множества записей. С одной стороны, модель данных в TSDB похожа на ключ значение, когда ключом выступает время, а значением – соответствующее ему измерение отслеживаемых данных. Однако, временные ряды постоянно растут. И, чтобы работать с этим огромным количеством данных, необходимо применять методы статистического анализа к различным диапазонам группировки измерений (по часам, минутам, секундам, микросекундам и т.д.).

Появившись в начале 2000-хх гг., базы данных временных рядов первого поколения были в основном ориентированы на просмотр финансовых данных, волатильность торговли акциями и валютой. Сегодня финтех – это лишь одно, но не единственное приложение TSDB-систем. Рост интереса к TSDB обусловлен развитием облачных технологий и активным внедрением интернета вещей в различные области жизни. Информационные системы, вычислительные кластера, беспилотные машины (автомобили, самолеты и пр.), датчики и IoT-устройства также постоянно генерируют события, которые надо наблюдать и анализировать.

Наиболее популярные на июль 2023 года СУБД временных рядов: InfluxDB, Kdb+, Prometheus, Graphite, TimescaleDB, DolphinDB, RRDTool, Apache Druid, TDengine, QuestDB, OpenTSDB, GridDB, Fauna, VictoriaMetrics, Amazon Timestream. Также подобные аналитические сценарии хорошо поддерживает колоночная СУБД ClickHouse, о чем мы рассказываем здесь

Как работает база данных временных рядов

Базы данных временных рядов обладают ключевыми архитектурными особенностями, которые сильно отличают их от других типов хранилищ. К ним относятся хранение и сжатие данных с отметками времени, управление жизненным циклом данных, агрегация данных, возможность обрабатывать большие временные ряды, зависящие от сканирования множества записей, и запросы с учетом времени. Реляционные базы данных с первичным индексом обычно используют структуру B-дерева для поиска, что хорошо сопоставляется с базовым аппаратным хранилищем и обеспечивает сбалансированную производительность операций чтения и записи. А NoSQL-хранилища обычно используют LSM-деревья, которые обеспечивают высокую производительность записи. Но производительность чтения в LSM-структурах ниже, чем у индекса на основе B-дерева. Поскольку производительность записи имеет решающее значение для рабочих нагрузок временных рядов, именно LSM-деревья обычно используются в базах данных временных рядов. Также в TSDB специализированные вторичные индексы оптимизируются специально для запроса данных во временных диапазонах и других распространенных шаблонов доступа к данным временных рядов. Хотя обеспечение поддержки этих индексов и возможностей удалять или обновлять определенные точки данных снижает производительность, это приемлемый компромисс для баз данных временных рядов, поскольку такие варианты использования довольно редки – события прошлого времени обычно не подлежат удалению и корректировке.

Реляционные СУБД хранят данные в строках на диске, причем разные типы данных расположены рядом друг с другом. Это ограничивает возможность использования некоторых алгоритмов сжатия и количество данных, которые можно сжать. А базы данных временных рядов обычно хранят данные так, что точки данных одного типа находятся рядом друг с другом. Это позволяет использовать оптимальные алгоритмы сжатия и экономить место на диске. В отличие от РСУБД, базы данных временных рядов, чаще всего не имеют схемы, позволяя быстро и легко добавлять новые поля без преобразования и миграции значений.

Чтобы показать отличия модели данных TSDB отличаются от РСУБД и классических key-value хранилищ, рассмотрим пару примеров конкретных решений. В частности, используемая для мониторинга системных метрик СУБД Prometheus, о чем мы писали вчера, принципиально хранит все данные в виде временных рядов: потоков значений с отметками времени, принадлежащих к одной и той же метрике и одному и тому же набору помеченных измерений. Помимо сохраненных временных рядов Prometheus может генерировать временные производные временные ряды в результате запросов. Метки включают многомерную модель данных Prometheus: любая заданная комбинация меток для одного и того же имени метрики идентифицирует конкретное многомерное воплощение этой метрики, например, все HTTP-запросы, которые использовали метод к POST-обработчику /api/tracks. Язык запросов позволяет выполнять фильтрацию и агрегирование на основе этих измерений. Изменение любого значения метки, включая добавление или удаление метки, приведет к созданию нового временного ряда.

Другая популярная TSDB-система, InfluxDB имеет линейный протокол для отправки данных временных рядов, который принимает следующую форму: measurement-name tag-set field-set timestamp. Имя измерения (measurement-name) — это строка, набор тегов (tag-set) — это набор пар ключ/значение, где все значения являются строками, а набор полей (field-set) — это набор пар ключ/значение, где значения могут быть int64, float64, bool или string. Имя измерения и наборы тегов хранятся в инвертированном индексе, что позволяет очень быстро искать определенные серии.

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

Другие решения для временных рядов не поддерживают несколько полей, что приводит к росту нагрузки на сетевые протоколы при передаче данных с общими наборами тегов. Большинство TSDB-решений поддерживают только значения float64, что не позволяет пользователю кодировать дополнительные метаданные вместе с временным рядом. В частности, OpenTSDB и KairosDB, поддерживающие теги, в отличие от Graphite и RRD, имеют ограничения на количество используемых тегов. При наличии от 5 до 6 тегов пользователь начнет видеть горячие точки в кластере Apache HBase или Cassandra, если эти базы данных типа семейства колонок используются в качестве основного хранилища. InfluxDB не имеет этого ограничения, поскольку модель данных этой СУБД изначально была разработана специально для временных рядов с поддержкой множества типов данных, индексируемых тегов и неиндексируемых полей. Это позволяет получить высокую производительность и гибкость. Таким образом, модели данных TSDB отличаются от РСУБД и классических key-value хранилищ.

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

Узнайте больше про современные архитектуры данных в проектах дата-инженерии и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://www.influxdata.com/time-series-database/
  2. https://prometheus.io/docs/concepts/data_model/
Поиск по сайту