Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Я бы посоветовал вам ознакомиться с Jonathan Oliver EventStore для справки.

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

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

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

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

Ааа и там, я как бы предложил структуру Jonathans EventStore.

Ответ 3

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

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

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

Ответ 4

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