Структура хранилища событий CQRS


В настоящее время я пытаюсь понять, как построить внутреннюю структуру хранилища событий. Что я получил до сих пор:

  • хранилище событий имеет две таблицы (коллекции, ...), один для агрегатов и один для событий.
  • Таблица агрегатов содержит следующие данные: aggregateId (который, вероятно, будет GUID) и aggregateVersion (который является целым числом, которое просто представляет число последнего события, повлиявшего на этот агрегат).
  • таблица событий содержит следующее: данные: eventId (опять же, GUID), aggregateId (которому принадлежит событие), payload и version (который является просто целым числом, описывающим порядок событий).

Верно ли это до сих пор? Следует ли упорядочивать события с помощью целого числа? Или они должны быть упорядочены на основе временной метки? Каковы преимущества каждого из них? В чем их недостатки?

4 12

4 ответа:

Я бы предложил вам взглянуть на магазин событий Джонатана Оливера Для справки.

В версии SQL persistence есть только одна таблица. Вы можете легко жить без таблицы aggregate и хранить aggregateId в таблице событий. Последняя версия может быть получена с помощью запроса max ().

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

А также, я думаю, вам следует добавить столбец даты в таблицу событий.

Наконец, вы, вероятно, хотите иметь какой-то флаг, который указывает, было ли событие отправлено вниз по потоку или нет. Это дополнение позволяет писать в одном потоке или процессе и отправлять в другом.

AA и там, я вроде как предложил структуру Jonathans EventStore.

Я мало что могу добавить к ответу Микаэля.

Вот еще одна вещь в качестве ссылки: несколько лет назад Грег Янг записал свои мысли о реализации магазина событий. Документ можно найти по адресу http://cqrs.wordpress.com/documents/building-event-storage/

Хотя я считаю, что его подход также эволюционировал в то же время.

Посмотрите на http://geteventstore.com/ - Эта версия Грега Янга также имеет источник , доступный для вашего прочтения [с лицензией BSD 3-clause на GitHub].

Агрегаты имеют отношение к CQR, но не непосредственно к хранилищу событий. Вы правы, есть две коллекции, но это события и снимки. Для получения более подробной информации смотрите: https://github.com/jamuhl/nodeEventStore