Историческая телеметрия
Платформа Strix использует ClickHouse как колоночную аналитическую СУБД для хранения исторических данных телеметрии. Архитектура трёхуровневой агрегации обеспечивает баланс между точностью данных, скоростью запросов и объёмом хранения.
Архитектура хранения
Три уровня агрегации
| Уровень | Таблица | Разрешение | Срок хранения | Агрегаты | Размер / устройство |
|---|---|---|---|---|---|
| Raw | telemetry_raw | Каждое значение (1--5 с) | 7 дней | -- | ~50 МБ/сут |
| 1 мин | telemetry_1min | 1 минута | 90 дней | avg, min, max, count | ~1 МБ/сут |
| 1 час | telemetry_1hour | 1 час | 2 года | avg, min, max, count | ~20 КБ/сут |
Агрегация выполняется автоматически при вставке данных через Materialized Views ClickHouse. Никаких cron-задач или фоновых процессов не требуется -- агрегат обновляется синхронно с каждым INSERT в telemetry_raw.
Структура таблиц
telemetry_raw
CREATE TABLE telemetry_raw (
equipment_id String,
parameter String,
ts DateTime64(3),
value Float64,
quality UInt8, -- 0=good, 1=uncertain, 2=bad
source String -- mqtt, opcua, rest, manual
) ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(ts)
ORDER BY (equipment_id, parameter, ts)
TTL ts + INTERVAL 7 DAY;
telemetry_1min
CREATE MATERIALIZED VIEW telemetry_1min
ENGINE = AggregatingMergeTree()
PARTITION BY toYYYYMM(ts_min)
ORDER BY (equipment_id, parameter, ts_min)
TTL ts_min + INTERVAL 90 DAY
AS SELECT
equipment_id,
parameter,
toStartOfMinute(ts) AS ts_min,
avg(value) AS avg_value,
min(value) AS min_value,
max(value) AS max_value,
count() AS sample_count
FROM telemetry_raw
GROUP BY equipment_id, parameter, ts_min;
Retention-cleanup сервис
Сервис retention-cleanup ежечасно проверяет политику хранения из субмодели StoragePolicy (на facility shell) и удаляет устаревшие данные:
| Параметр StoragePolicy | Описание | По умолчанию |
|---|---|---|
RawRetentionDays | Срок хранения raw-данных | 7 |
AggRetentionDays | Срок хранения 1-мин агрегатов | 90 |
ArchiveRetentionDays | Срок хранения 1-час агрегатов | 730 (2 года) |
В StoragePolicy можно задать Overrides[] с фильтром MatchEquipmentType, чтобы увеличить retention для критического оборудования (например, 30 дней raw для мельниц вместо 7).
Конфигурационный каскад
Параметры хранения и опроса определяются каскадом с приоритетом от частного к общему:
Запросы из фронтенда
Composable useClickHouseQuery автоматически выбирает уровень агрегации в зависимости от запрашиваемого периода:
| Запрашиваемый период | Используемая таблица | Обоснование |
|---|---|---|
| До 2 часов | telemetry_raw | Максимальная детализация, допустимый объём |
| 2 часа -- 7 дней | telemetry_1min | Баланс точности и скорости |
| Более 7 дней | telemetry_1hour | Минимальная нагрузка на ClickHouse |
Пример использования
const { data, loading, error } = useClickHouseQuery({
equipmentId: 'pump-401',
parameter: 'MotorCurrent',
from: '2026-03-25T00:00:00Z',
to: '2026-03-26T00:00:00Z',
// tier выбирается автоматически: 24ч → telemetry_1min
});
Флаги качества
Каждая запись в telemetry_raw маркируется флагом качества:
| Флаг | Значение | Источник |
|---|---|---|
0 (good) | Данные достоверны | telemetry-writer (по умолчанию) |
1 (uncertain) | Задержка доставки или восстановленное значение | telemetry-writer / data-quality |
2 (bad) | Выброс, застывшее значение или ручная маркировка | data-quality (ретроспективно) |
При агрегации в telemetry_1min записи с quality=2 исключаются из расчёта avg_value, но учитываются в sample_count.
Pipeline записи данных
Сервис telemetry-writer получает значения из MQTT и записывает в ClickHouse:
- Подписка на MQTT-топики по маске из TelemetryConfig
- Буферизация входящих значений (flush каждые 5 с или при достижении 1000 записей)
- Пакетная вставка в
telemetry_rawчерез HTTP-интерфейс ClickHouse - Materialized Views автоматически обновляют агрегаты
Визуализация
Компонент TelemetryHistoryChart отображает исторические данные в виде интерактивного графика:
- Автоматический выбор тира агрегации по масштабу
- Наложение нескольких параметров на одну ось
- Зоны качества данных (цветовая заливка по флагам)
- Экспорт в CSV для внешнего анализа
- Zoom / pan с автоматической подгрузкой детальных данных
Оценка объёмов хранения
| Параметр | Значение |
|---|---|
| Оборудований в проекте | 100 |
| Параметров на оборудование (среднее) | 10 |
| Период опроса | 5 с |
| Raw за сутки | ~5 ГБ (сжатие ClickHouse ~10x) |
| 1 мин за сутки | ~100 МБ |
| 1 час за сутки | ~2 МБ |
| Итого за год (с retention) | ~45 ГБ raw (7 дней) + 9 ГБ 1min (90 дней) + 0.7 ГБ 1hour (2 года) |