2012-05-04 4 views
1

У меня есть простая архитектура CQRS, которая работает хорошо. Событие публикуется и подписывается различными подписчиками, один из которых синхронизирует базу данных отчетов [в RavenDb].Регенерирующая база запросов

Скажем, например, моя база данных отчетов повреждена/потеряна. С Event Sourcing я могу воспроизвести события и перестроить базу данных отчетов, однако я [в настоящее время] не использую источники событий; У меня есть простой nHibernate persister для реляционного хранилища. Было ли решение создать сценарий «регенерации», который по существу отправил бы все события на основе реляционного хранилища (например, PersonCreatedEvent, а затем 30xPersonLikedBlogPostEvent и т. Д.)? Это по сути делает то же самое, что и источник событий, но события выводятся из реляционной модели.

Очевидно, что здесь стоит упомянуть как ремонтопригодность и DR.

ответ

0

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

1

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

+0

Спасибо, я не слишком суетился о преимуществах регенерации из/истинного представления истории объектов и т. Д., Но наличие базы данных отчетов RavenDb важно для SLA производительности сайта. Однако я перехожу к источнику событий. С уважением – sjhuk

0

Я не думаю, что для этого есть простое/быстрое решение. Это на самом деле то, что вам нужно будет сделать, если вы переносите данные из реляционных источников в источник событий. Как вы сказали, единственное, что вы можете сделать, это для каждого сущностного скрипта события в правдоподобной последовательности (т. Е. CreateEvent, а затем изменения вашего другого состояния). Но когда вы захватываете эти события, я бы сохранил их, чтобы вы могли просто повторно запустить их в будущем.

0

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

Смежные вопросы