Базы данных
Time-Series базы данных
Datadog мониторит инфраструктуру 23,000+ компаний. 10 триллионов метрических точек в их БД. Каждую секунду приходит 4+ миллиарда новых точек. Это невозможно в PostgreSQL без специализации. Именно для этого созданы time-series БД.
- **Cloudflare**: ClickHouse для 400 миллиардов DNS событий в день - аналитика за любой период за секунды
- **Coinbase**: InfluxDB для торговых метрик в реальном времени, 100K точек/сек
- **Bitfinex**: TimescaleDB для 4+ млрд торговых тиков с полным SQL интерфейсом
Что такое time-series данные
Time-series данные - последовательность значений с временными метками. Характеристики: только append (редко обновляются), высокий write throughput, range queries по времени, агрегации по периодам. Примеры: метрики серверов, биржевые котировки, IoT сенсоры, логи.
Чем time-series БД отличается от общей СУБД: оптимизированный write path (batch ingestion), колоночное хранение для high compression, built-in downsampling и retention policies, специализированные функции (rate(), increase(), predict()).
Почему традиционные реляционные БД плохо справляются с time-series при миллионе точек в секунду?
InfluxDB
InfluxDB - специализированная time-series БД. Data model: measurement (аналог таблицы), tags (indexed string labels), fields (числовые значения), timestamp. Tags индексируются инвертированным индексом - быстрый поиск по host=web01. Fields не индексируются - только sequential scan.
InfluxDB 3.0 переписан на Apache Arrow + DataFusion - колоночное хранение вместо TSM файлов. Совместимость с InfluxQL API сохранена. Производительность на аналитических запросах выросла в 10-100x.
В InfluxDB tags индексируются, fields нет. Запрос: filter по host AND filter по value > 80. Что будет медленным?
TimescaleDB
TimescaleDB - PostgreSQL extension для time-series. Hypertable автоматически партиционирует данные по времени (chunks). Advantage: полный SQL, нормальные таблицы, JOIN с реляционными данными, все PostgreSQL extensions. Compression до 95% для старых chunks.
Криптобиржа Bitfinex использует TimescaleDB для хранения 4+ миллиардов торговых тиков. Continuous aggregates обновляются в реальном времени - не нужен отдельный pipeline. Все запросы - обычный SQL, нет нового query language.
Чем hypertable в TimescaleDB отличается от обычной партиционированной PostgreSQL таблицы?
ClickHouse для аналитики
ClickHouse - колоночная СУБД от Яндекса для OLAP аналитики. Не специализируется только на time-series, но идеально подходит для аналитики по событиям: вебаналитика, логи, метрики. Скорость: агрегация миллиарда строк за секунды.
ClickHouse MergeTree движок: данные сортируются по ORDER BY и хранятся по колонкам. При чтении только нужные колонки десериализуются. LZ4/ZSTD компрессия. Materialized Views для pre-aggregation. ReplicatedMergeTree для HA.
ClickHouse колоночное хранение vs PostgreSQL строчное. Запрос: SELECT avg(amount) FROM orders WHERE date > '2024-01-01'. Почему ClickHouse быстрее?
Downsampling и Retention
Downsampling - агрегирование исторических данных для уменьшения объёма. Метрики за последний час - посекундно. За последний день - поминутно. За последний год - почасово. Старые детальные данные заменяются агрегатами.
Datadog хранит метрики на трёх уровнях: 1 секунда - 15 дней, 1 минута - 2 месяца, 1 час - 15 месяцев. Это стандартная пирамида retention для observability платформ. Raw данные доступны только для свежих инцидентов.
Time-series БД нужна только для DevOps метрик
Time-series данные везде: биржевые котировки (Bloomberg), IoT (10 миллиардов устройств к 2030), аналитика пользовательских событий (Amplitude, Mixpanel), лог аудита финансовых транзакций.
Любые данные с временной меткой - time-series. Если запросы преимущественно "за период" с агрегациями - специализированная TSDB даст 10-100x улучшение vs обычная СУБД.
Зачем нужен downsampling вместо простого удаления старых данных?
Итоги
- **InfluxDB**: специализирован для метрик, tags(indexed) vs fields(not indexed), Flux query language
- **TimescaleDB**: PostgreSQL + автоматическое партиционирование + continuous aggregates = time-series без изучения нового стека
- **ClickHouse**: колоночная СУБД для OLAP аналитики, миллиарды строк за секунды
Связанные темы
Time-series БД применяют технологии из смежных областей:
- LSM-Tree — InfluxDB и Cassandra используют LSM-tree для high write throughput
- Партиционирование — Hypertable в TimescaleDB - автоматическое range партиционирование по времени
- Мониторинг БД — Time-series БД сами часто используются для хранения метрик о других БД
Вопросы для размышления
- Когда TimescaleDB предпочтительнее InfluxDB для time-series данных?
- Как downsampling влияет на точность аномалий и outliers в исторических данных?
- Система мониторинга: 100 серверов x 1000 метрик x 1 раз в 10 секунд = 10,000 точек/сек. Какую БД выбрать?