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

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

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

В текущей версии базы данных по умолчанию используется Domino v1. Для использования Domino v2 выполните следующие шаги.

Domino v2 доступен в качестве экспериментального компонента в YMatrix 6.3.X. Требуется создание дополнительных плагинов и настройка GUC-параметров.

-- For version 6.3, manually enable Domino v2 support; restart required for changes to take effect
gpconfig -c domino.enabled -v on
gpstop -ar

-- Create the extension
CREATE EXTENSION domino;

-- 1. Set stream version at session level; streams created in this session will be v2
SET mx_stream_default_version TO 2;

-- Verify version
SELECT version FROM mx_stream WHERE streamrelid = 'your_stream_name'::regclass::oid;

-- 2. Alternatively, enable globally
gpconfig -c mx_stream_default_version -v 2
gpstop -u

Подробнее о GUC-параметрах см. в разделе Технические параметры.

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

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

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

Основные различия

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

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

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

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

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

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

    • v1 обрабатывает большой диапазон XLog (от предыдущей позиции до текущей), что может приводить к накоплению логов.
    • v2 вводит модуль Ticker, ограничивающий каждый цикл обработки небольшим диапазоном XLog (по умолчанию: один Tick, например, по MB или времени), что обеспечивает более быстрый прогресс и снижает накопление.
  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 над столбцами потоковой таблицы не поддерживаются. При необходимости изменений пересоздайте поток. Примечание: Если исходная таблица также подвергается DDL, рекомендуется пересоздать поток
Индексы потоковой таблицы Поддерживается Индексы могут быть независимо созданы и поддерживаемы на потоковых таблицах
Фильтрация измерений Поддерживается Поддерживает условия фильтрации на измерительных таблицах при операциях JOIN
Поддержка отказоустойчивости Поддерживается Потоки продолжают работу после отказа сегмента; однако небольшое количество транзакций в момент переключения может быть потеряно
Накладные расходы по производительности Минимальное влияние на производительность записи в источник; результаты потока обновляются в течение нескольких секунд
Обработка больших транзакций Поддерживается Оптимизированная пакетная обработка и использование памяти при декодировании журнала транзакций. Более стабильна при больших транзакциях. Однако используйте потоковую обработку с осторожностью на таблицах с частыми большими транзакциями
Обработка исторических данных Поддерживается Используйте 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.
    • Агрегированные выражения не могут участвовать в дальнейших выражениях. Например, avg(col1)+1 недопустимо, но avg(col+1) поддерживается.
  7. Ограничения JOIN двух потоков:

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