DDDesigner

Хранение событий с Chronacta

Chronacta — хранилище событий

При хранении событий источником истины становится история значимых изменений: текущее состояние можно восстановить, проверить и воспроизвести. Такой подход можно реализовать вручную — на SQL или в коде приложения — либо взять специализированную базу данных, например Chronacta или KurrentDB. В DDDesigner встроена поддержка Chronacta: по модели с событиями можно сразу получить готовые файлы интеграции.

Что такое Chronacta

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

В отличие от обычной базы текущего состояния, Chronacta сохраняет путь, которым система пришла к результату. Это делает историю доступной для аудита, повторной обработки и восстановления состояния после сбоев или миграций.

  • Это не реляционная база: нет произвольных JOIN и UPDATE строк
  • Это не замена Kafka или NATS: Chronacta — надёжный журнал с версиями, брокеры по-прежнему отвечают за доставку сообщений
  • Это не хранилище «только текущего состояния»: состояние выводится из истории событий

Хранение событий и CRUD

В CRUD строка перезаписывается, и старые значения теряются без отдельного аудита. При хранении событий источник истины — последовательность фактов. Текущее состояние восстанавливают, читая поток и применяя доменную логику или проекцию.

Chronacta хранит и доставляет события. Бизнес-правила агрегата живут в вашем сервисе: Chronacta знает идентификатор потока, тип события и данные, а не что такое «заказ».

  • Неизменяемость: уже записанное событие не правят — исправление оформляют новым событием
  • Записи только добавляются; историю можно запрашивать на момент времени и проигрывать заново
  • Запись и чтение разделены: пишут в журнал, читают через проекции или сам поток

Понятия DDD → Chronacta

Domain-Driven Design и хранение событий — разные идеи, которые часто используют вместе. DDD — про язык и границы; хранение событий — про способ зафиксировать состояние.

  • Доменное событие → запись в поток: тип события и данные в JSON
  • Экземпляр агрегата → обычно один поток (например order-42)
  • Репозиторий → загрузка — чтение потока и свёртка; сохранение — запись с ожидаемой версией
  • Ограниченный контекст → префиксы имён потоков, отдельные сервисы, при необходимости — раздельные пути для арендаторов

Сравнение инструментов для хранения событий

КритерийБез отдельного сервераChronactaKurrentDB
Что нужно запускатьВаше приложение + обычно PostgreSQL/SQL-таблицы или библиотека внутри процессаСервер Chronacta (и при необходимости коннектор для моделей чтения в Postgres)Кластер KurrentDB или Kurrent Cloud
Источник истиныПотоки, таблицы, конкуренцию и срок хранения вы проектируете самиНеизменяемые потоки: записи только добавляются; у потока есть версия и общая позиция в журналеВстроенные неизменяемые потоки событий с версиями
Защита от одновременных записейПроверку версии и конфликтов вы реализуете сами — поверх SQL или библиотекиПри записи сервер сам проверяет ожидаемую версию потокаПри записи сервер сам проверяет ожидаемую версию
ПодпискиОпрос, LISTEN/NOTIFY, исходящие сообщения или отдельная шинаКраткоживущие и постоянные подписки; контрольные точки хранятся на сервереПодписки с догоном истории и постоянные подписки встроены в продукт
Проекции / модели чтенияОбработчики и SQL-миграции пишете самиПроекции на сервере (CEL, встроенные, Starlark), обработчики в приложении и проектор в Postgres по schema.yamlВстроенный движок проекций; внешние модели чтения — через подписки
Схемы и контрактыСоглашения в коде или свой реестрРеестр JSON-схем с версионированиемТипизация событий и экосистема вокруг контрактов
Зрелость эксплуатации и экосистемаПолностью зависит от практик вашей командыБолее новый продукт; бесплатная версия для разработчиков; командная строка, админка, метрики, при необходимости — отказоустойчивый кластерЗрелый продукт (ранее EventStoreDB); широкая документация, клиенты, управляемое облако
Связь с DDDesignerМоделируете агрегаты, события и проекции; адаптеры хранилища пишете самиСхемы, манифесты, адаптеры и проекции в PostgresОтдельной генерации под KurrentDB пока нет: модель в DDDesigner, хранилище подключаете вручную
Когда подходитПростой домен, привычная эксплуатация SQL или изучение хранения событий в одном сервисеНужно отдельное хранилище событий, бесплатная версия для разработчиков и готовая интеграция из DDDesignerНужна проверенная специализированная платформа, клиенты для разных языков или управляемое облако

Сравнение опирается на открытую документацию продуктов по состоянию на 2026 год. Chronacta и KurrentDB развиваются независимо — перед производственным выбором сверяйтесь с официальными материалами. Обзор подготовлен DDDesigner и не спонсируется Kurrent.

Как выбрать между тремя подходами

Без отдельного сервера проще эксплуатация: вы остаётесь в PostgreSQL или в библиотеке внутри процесса, но сами отвечаете за конкуренцию, подписки, повторную обработку и политику хранения. Часто этого достаточно для первого сервиса, где состояние хранится событиями.

Chronacta даёт специализированное хранилище: постоянные подписки, реестр схем, проекции на сервере и проектор в Postgres. Встроенная поддержка в DDDesigner помогает сгенерировать интеграцию.

KurrentDB (ранее EventStoreDB) — зрелая специализированная база с большой экосистемой и управляемым облаком. Выбирайте её, когда нужна эта операционная зрелость и вы готовы подключать клиенты самостоятельно, без готового пути Chronacta в DDDesigner.

Проекции в Chronacta

Chronacta поддерживает несколько способов построения моделей чтения. Когда в генерации выбран Chronacta, DDDesigner сопоставляет ваши проекции с этими способами.

  • Простые присвоения полей → манифесты проекций на сервере (CEL и встроенные выражения)
  • Сложные обработчики → постоянные подписки и фоновые процессы в вашем сервисе
  • Проекция в Postgres → внешняя модель чтения через schema.yaml, sqlgen и коннектор (источник истины — Chronacta)

Встроенная поддержка Chronacta в DDDesigner

В DDDesigner можно моделировать агрегаты, команды, события и проекции в одном месте, а затем сгенерировать артефакты для подключения этой модели к Chronacta.

Встроенная интеграция создаёт JSON-схемы, манифесты проекций, адаптеры хранилища, заготовки подписок и артефакты моделей чтения в Postgres, если они нужны проекции. Доменные правила остаются в приложении, где им и место.

Частые вопросы

Нужен ли Chronacta, чтобы проектировать хранение событий в DDDesigner?

Нет. Хранение событий можно реализовать вручную или с помощью специализированной базы данных. В DDDesigner встроена поддержка Chronacta, но модель можно использовать и с другим хранилищем.

Чем Chronacta отличается от хранения событий в PostgreSQL?

На PostgreSQL вы сами (или с помощью библиотеки) реализуете журнал, подписки и проекции. В Chronacta всё это уже реализовано в виде отдельного сервера: потоки, конкуренция, постоянные подписки, реестр схем и быстрые проекции (в том числе для Postgres).

Чем Chronacta отличается от KurrentDB?

Оба — специализированные хранилища событий с потоками, проверкой версий и подписками. У KurrentDB более длинная производственная история и управляемое облако. Chronacta — специализированное хранилище с бесплатной версией для разработчиков и готовой интеграцией с DDDesigner.

Можно ли использовать Chronacta бесплатно?

Да. Есть бесплатная версия для разработчиков — для локальной разработки и оценки. Развертывание и лицензирование для высоконагруженных проектов описано в документации Chronacta.

DDDesigner

Спроектируйте хранение событий с помощью DDDesigner

Моделируйте агрегаты, события и проекции визуально. Используйте встроенную поддержку Chronacta для генерации интеграции или подключите собственное хранилище событий.

Начать