Обзор возможностей

Движок потоковых вычислений Domino — это модуль потоковых вычислений, введённый в YMatrix 6.0. Он инкрементально поддерживает результаты вычислений для повышения эффективности анализа данных и производительности запросов.

Быстрый старт

Domino v2 включён по умолчанию начиная с YMatrix 6.4.X и не требует дополнительной настройки.

Для получения дополнительной информации о параметрах GUC см. Технические параметры.

Архитектура и основные модули

Архитектура Domino состоит из двух основных компонентов: фреймворка выполнения и движка вычислений.

  • Фреймворк выполнения управляет планированием потоков и метаданными.
  • Движок вычислений отвечает за декодирование, переписывание запросов и выполнение.

Ключевые различия

Основная цель Domino v2 — поддерживать большее количество потоковых задач при сохранении той же задержки запросов, решая проблемы конкуренции за ресурсы и высокой нагрузки в v1 при увеличении числа потоков.
Основные различия заключаются в управлении ресурсами и механизмах выполнения. Domino v2 повышает масштабируемость и стабильность благодаря оптимизированной архитектуре.

Управление ресурсами

  1. Общий декодер

    • В v1 каждый поток выполняет независимое декодирование, что увеличивает нагрузку с ростом числа потоков.
    • В v2 все потоки в одной базе данных используют один общий декодер. Результаты декодирования сохраняются в файлах TLog. Нагрузка на декодирование зависит только от объёма изменений данных, а не от числа потоков.
  2. Общие рабочие процессы

    • В v1 каждый поток занимает отдельный рабочий процесс, что приводит к увеличению потребления ресурсов при росте числа потоков.
    • В v2 используется глобальный пул рабочих процессов, общий для всех потоков, что ограничивает общее потребление ресурсов и предотвращает конкуренцию за них.
  3. Инкрементальное выполнение (малые шаги)

    • В v1 обрабатывается большой диапазон XLog (от последней обработанной позиции до текущей), что может вызывать накопление логов.
    • В v2 модуль Ticker ограничивает каждый цикл обработки небольшим сегментом XLog (по умолчанию — один Tick, например, фиксированный размер в МБ или временной интервал), что обеспечивает более быстрый прогресс и снижает накопление.
  4. Функциональность

    • Значительных функциональных различий между v1 и v2 нет.
  5. Совместимость

    • v1 и v2 могут сосуществовать. Однако при понижении версии базы данных потоки v2 станут недоступны, в то время как потоки v1 останутся работоспособными.

Механизм выполнения

Domino v2 фокусируется на оптимизации фреймворка выполнения. Основные модули:

  1. Ticker
    Разделяет XLog на управляемые сегменты. Ограничивает область каждого потокового вычисления (минимальная единица — один Tick), предотвращая большие транзакции, которые могут замедлить систему. Примечание: Большие транзакции при обработке исторических данных при создании WITH DATA потока не подпадают под это ограничение.

  2. Scheduler
    Управляет планированием потоков. Повторно использует рабочие процессы для ограничения общего использования CPU и повышения его эффективности для отдельных процессов.

  3. Decoder
    Разбирает XLog и генерирует кортежи и снапшоты (TLog) для потребления потоками.

  4. TLog
    Хранит декодированные записи изменений. Выступает в качестве промежуточного хранилища между Decoder и потоковыми вычислениями, позволяя потоковой обработке читать и обрабатывать изменения.

Краткий обзор возможностей

Возможность Поддерживается Примечания
Движок хранения исходной таблицы HEAP / MARS3
Тип распределения исходной таблицы Hash / Random / Segment Set Не поддерживает таблицы только с мастер-узлом или реплицированные таблицы в качестве исходных
Партитционирование исходной таблицы Поддерживается
Движок хранения потоковой таблицы HEAP / MARS3 / AO
Ключ распределения потоковой таблицы Гибкий выбор, может отличаться от исходного Лучшая практика: использовать тот же ключ распределения. Для агрегационных потоков совпадение ключей позволяет локализовать вычисления
Свойства хранения потоковой таблицы Независимый выбор движка, партитционирования и ключа распределения
Исходные таблицы с несколькими столбцами Поддерживается Поддерживает исходные таблицы с ≥ 300 столбцами
Несколько потоков на одну таблицу Поддерживается Несколько потоков могут использовать одну и ту же исходную таблицу. «Одна таблица» означает один и тот же источник
Обогащение измерениями Поддерживается Поддерживает соединение с ≥ 10 таблицами измерений
Агрегация Поддерживается Поддерживает группировку по ≥ 32 полям. Внутренне объединяет несколько типов полей в составной тип для агрегации
DDL исходной таблицы Не поддерживается Создание индексов на исходных таблицах не влияет на потоки. Удаление индексов может нарушить выполнение потока
DDL потоковой таблицы Не поддерживается Операции DDL над столбцами потоковой таблицы (например, ADD/DROP COLUMN) не поддерживаются. При необходимости изменений пересоздайте поток. Примечание: Если исходная таблица также подвергается DDL, рекомендуется пересоздать поток
Индексы потоковой таблицы Поддерживается Индексы можно независимо создавать и поддерживать на потоковых таблицах
Фильтрация измерений Поддерживается Поддерживает условия фильтрации на таблицах измерений при обогащении
Поддержка отказоустойчивости Поддерживается Потоки продолжают работу после отказа сегмента. Однако небольшое количество транзакций в точке переключения может быть потеряно
Накладные расходы на производительность Минимальное влияние на производительность записи в исходной таблице; результаты потока обновляются в течение нескольких секунд
Обработка больших транзакций Поддерживается Оптимизированная пакетная обработка и использование памяти при декодировании журнала транзакций повышают стабильность при больших транзакциях. Однако используйте потоки осторожно на таблицах с частыми большими транзакциями
Обработка исторических данных Поддерживается Используйте WITH DATA при создании потока для обработки существующих данных исходной таблицы. Если исходная таблица очень большая, это создаёт длительную транзакцию, блокирующую создание других потоков до завершения
JOIN между потоками Поддерживается Поддерживает неравенства. Исходные таблицы могут иметь разные ключи распределения. Потоковая и исходная таблицы могут иметь разные ключи распределения

Дополнительные замечания

  1. Объекты потоковых таблиц нельзя получить через JDBC-метаданные. Используйте специализированные SQL-запросы для их запроса.

  2. Создавать объекты потоков могут только суперпользователи.

  3. В предложении SELECT определения потока не допускаются дублирующиеся имена столбцов. Особенно для агрегационных потоков с агрегатными функциями: используйте уникальные псевдонимы, например, select avg(col1) as avg_col1, avg(col2) as avg_col2. Альтернативно используйте проекцию столбцов в операторе CREATE STREAM.

  4. Избегайте прямых операций DML над потоковыми таблицами (контролируется GUC mx_stream_internal_modify).

  5. В определениях потоков не допускаются предложения WITH.

  6. Ограничения агрегационных потоков:

    • В определении потока допускается только одно предложение FROM STREAMING.
    • Ключ GROUP BY должен включать все ключи распределения соответствующей потоковой таблицы.
    • Глобальная агрегация без GROUP BY не допускается.
    • Предложение HAVING не поддерживается. Вложенные подзапросы с внешними фильтрами WHERE не могут имитировать HAVING.
    • Агрегатные выражения нельзя повторно использовать в других выражениях. Например, avg(col1)+1 недопустимо, но avg(col+1) разрешено.
  7. Ограничения JOIN между потоками:

    • GROUP BY не допускается в вычислениях JOIN между потоками.
    • Поддерживаются только равенства INNER JOIN между двумя исходными таблицами. UNION, LEFT JOIN или JOIN с не-потоковыми таблицами не поддерживаются.
    • Не допускаются агрегатные функции, такие как DISTINCT, SUM, MAX.
    • Оконные функции не поддерживаются.
    • Предложение ORDER BY не поддерживается.
  8. В многоуровневых потоковых конвейерах промежуточные потоки не могут быть агрегационными.