Blog/техническое обсуждение

Модель потоковой обработки PostgreSQL

2026-04-15 · YMatrix Team
#техническое обсуждение

Вопрос, который мы никогда не задавали

Что, если PostgreSQL уже является потоковой системой?

На первый взгляд это звучит неверно.

Когда мы говорим о потоковых системах, мы обычно имеем в виду такие системы, как Kafka или Flink — системы, специально разработанные для непрерывной обработки данных.

PostgreSQL, напротив, традиционно рассматривается как классическая база данных, предназначенная для хранения и выполнения запросов.

Однако это различие может быть не столь фундаментальным, как кажется.

WAL — это поток

Каждое изменение в PostgreSQL записывается в WAL (Write-Ahead Log). WAL обладает тремя ключевыми свойствами:

  • только добавление (append-only)
  • строгая упорядоченность
  • надежность (durability)

Именно эти свойства определяют поток. С точки зрения системной архитектуры:

WAL — это не просто журнал. Это поток.

Осознав это, возникает новый вопрос:

Если в PostgreSQL уже есть поток, почему он не ведёт себя как потоковая система?

Недостающий элемент: вычисления

Различие между PostgreSQL и потоковыми системами заключается не в данных. Оно заключается в вычислениях.

Традиционный PostgreSQL выполняет запросы в пакетной модели:

  • запрос читает снимок данных (snapshot)
  • вычисляет результат
  • возвращает его

При каждом изменении данных запрос необходимо выполнять заново. Потоковые системы работают принципиально иначе:

  • они реагируют на изменения
  • они инкрементально обновляют результаты

Отсюда ключевой вывод:

Пакетная модель пересчитывает, потоковая — реагирует.

От SQL к инкрементальным вычислениям

Если WAL — это поток, возникает следующий вопрос:

Может ли SQL работать с потоками?

Ответ — да, но не в его традиционной форме.

Необходимо преобразовать SQL в модель инкрементальных вычислений.

Это называется:

DeltaPlan

DeltaPlan меняет парадигму выполнения:

  • вместо полного пересчёта результатов
  • распространяются только изменения

Каждое обновление становится дельтой. Каждый оператор становится инкрементальным. Это превращает SQL в движок непрерывных вычислений.

Потоковая модель PostgreSQL

На этом этапе можно описать единую модель:

WAL → Logical Decoding → События
                 ↓
              DeltaPlan
                 ↓
        Потоковое выполнение
                 ↓
        Непрерывные результаты

Ключевая идея:

  • WAL обеспечивает поток данных
  • DeltaPlan определяет вычисления
  • выполнение становится непрерывным

Результат — это уже не статическая таблица, а постоянно обновляемое представление данных.

Переосмысление PostgreSQL

Это приводит к фундаментальному изменению восприятия PostgreSQL. PostgreSQL — это не просто база данных.

Это система, которая уже содержит:

  • источник потоковых данных (WAL)
  • мощный язык вычислений (SQL)

Чего ей не хватает — это явного моста между ними. Как только этот мост появляется:

PostgreSQL становится потоковой системой.

Что делает Domino

Domino не вводит новую парадигму. Он делает неявную парадигму явной:

  • превращает WAL в поток первого класса
  • превращает SQL в инкрементальные вычисления
  • превращает таблицы в непрерывные результаты

Иными словами:

Domino — это реализация потоковой модели PostgreSQL.

Заключение

Вернёмся к исходному вопросу. Является ли PostgreSQL уже потоковой системой?

Если WAL — это поток, и SQL может быть инкрементальным, то ответ: Да.

PostgreSQL уже является потоковой системой. Мы просто раньше этого не замечали.