Источник событий и постоянство

12

Я читаю на источники событий и у меня есть вопрос относительно настойчивости.

Я все еще могу иметь БД со всеми сущностями, верно? Или события должны воспроизводиться при каждом запуске приложения, чтобы получить последнюю версию каждого объекта в памяти? Похоже на отходы в больших системах (как в большом количестве данных)?

Смысл с источником событий в том, что я могу воспроизвести события, чтобы заполнить хранилище данных, если это необходимо? (или проанализировать данные)

jgauffin
источник

Ответы:

9

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

Создание хранилища событий, которое ведет себя хорошо в больших системах, на самом деле не простая задача. Воспроизведение всех данных может быть действительно дорогим, во многом зависит от объема данных, которые необходимо воспроизвести. Но есть методы, которые могут помочь вам в этом, одним из которых является концепция снимка. Повтор производится только с определенного момента. Преимущества, которые магазин событий приносит в вашу систему, неоценимы. Благодаря тому, что все, что происходило в вашей системе, воспроизводилось, все данные в любой момент - это здорово. Подумайте об анализе, о воспроизведении ошибок, о статистике.

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

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

Я написал подробную статью о том, каковы преимущества и как на самом деле выглядит архитектура CQRS в сочетании с источником событий. Вы можете проверить это CQRS, доменные события и обзор DDD .

Вадим
источник
1
Я знаю все о CQRS и DDD. Я понимаю преимущества источников событий. Снимки - отличный способ ускорить процесс. Это, однако, не является частью вопроса. Но вопрос был скорее в том, где будут храниться все модели / объекты после загрузки. В памяти (потребуется много памяти в больших системах) или в БД? Какая лучшая практика?
jgauffin
1
При воссоздании агрегата для выполнения данной команды события будут воспроизведены, и агрегат сохранится в памяти, выполнит действие, сгенерирует события и затем сохранит события в хранилище событий. Но да, агрегат с его ценностными объектами и сущностями будет храниться в памяти. Нет необходимости хранить их в другой базе данных. Обычно это будет короткий промежуток времени, пока команда не будет выполнена в любом случае. Если у вас есть команды, которые охватывают несколько агрегатов, которые немного отличаются, это может также сигнализировать о некоторых проблемах проектирования в ваших ограниченных контекстах.
Вадим
9

В Event Sourcing главный вопрос: «Какая у вас книга рекордов».

Если ваша книга рекордов - это ваш поток событий, у вас не будет проблем. Если ваша книга записей - это ваша «модель сущностей», тогда проблемы начнут возникать повсюду. Частично это то, что вы можете сказать: «Если бы я потерял свою модель сущности, я мог бы перестроить ее из своего потока событий». Если вы уверены в этом вопросе, то ваш журнал событий - это ваша книга рекордов.

Также важно помнить, что большинство людей, использующих источники событий, используют модель чтения. Эта модель используется для запроса данных. Впрочем, это скорее похоже на модель с 1nf, чем на 3nf. Они только воспроизводят события, чтобы вернуть состояния агрегатов, чтобы определить, следует ли разрешить запись.

Грег Янг
источник
Привет, Грег, я новичок в области источников событий, но я действительно хочу освоить это, не могли бы вы предложить некоторые ресурсы для практических примеров и объяснений, я много смотрел и читал о CQRS, ES, но когда я хочу запустить прототип используя его, я действительно не могу понять, что, где, когда :) Я надеюсь, что вы можете предложить что-то для меня (я на стороне Java). Спасибо за ваше время.
вач
1

Я все еще могу иметь БД со всеми сущностями, верно? Или события должны воспроизводиться при каждом запуске приложения, чтобы получить последнюю версию каждого объекта в памяти?

Ответ зависит от требований вашего приложения. Я видел, как это делается в обоих направлениях.

Один чрезвычайно успешный программный пакет для небольших бухгалтерских фирм читает журнал CQRS каждый раз при запуске. Объем необработанных данных был относительно небольшим, поэтому время запуска было меньше минуты даже на медленных компьютерах. Они занимались CQRS более десяти лет, прежде чем практика стала популярной. Они знали, что добились чего-то хорошего, когда поняли, что могут снова и снова обновлять данные своих клиентов, не сталкиваясь с проблемами, которые они видят в своих более крупных системах.

В системах с большими объемами данных и / или системах, которые полагаются на функциональные возможности СУБД для реализации стороны запроса, у вас есть база данных для «текущего представления» данных, полученных из событий (вы даже можете иметь несколько таких представлений). Преимущество этого подхода состоит в том, что он позволяет вам строить запросы с использованием знакомых технологий.

dasblinkenlight
источник
Какой бухгалтерский пакет делает это?
Магнус
@ user1420752 Axys .
dasblinkenlight