Структура хранилища событий CQRS
В настоящее время я пытаюсь понять, как построить внутреннюю структуру хранилища событий. Что я получил до сих пор:
- хранилище событий имеет две таблицы (коллекции, ...), один для агрегатов и один для событий. Таблица агрегатов содержит следующие данные:
- таблица событий содержит следующее: данные:
eventId
(опять же, GUID),aggregateId
(которому принадлежит событие),payload
иversion
(который является просто целым числом, описывающим порядок событий).
aggregateId
(который, вероятно, будет GUID) и aggregateVersion
(который является целым числом, которое просто представляет число последнего события, повлиявшего на этот агрегат).
Верно ли это до сих пор? Следует ли упорядочивать события с помощью целого числа? Или они должны быть упорядочены на основе временной метки? Каковы преимущества каждого из них? В чем их недостатки?
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