我们目前正在评估 CQRS 和事件溯源架构。我试图了解使用这种设计的维护含义是什么。我正在努力寻找答案的两个问题是:
1) 如果在应用程序启动并运行了一段时间后,需要向 ReadModel 数据库上的 ViewModel 添加额外字段,会发生什么情况?比如说,在 CustomerList ViewModel 上需要客户邮政编码,而以前不需要。因此,可以轻松地将额外的列添加到 ViewModel 数据库中,但是如何填充呢?据我所知,唯一的方法是清除读取数据库,并从头开始重播所有事件以备份 ReadModel 数据库。但是,如果应用程序已经启动并运行了数月或数年(正如我们希望的那样)怎么办。这可能是要重播的数百万个事件,只是为邮政编码列添加数据。
如果出于某种技术原因,ReadModel 数据库不同步,或者我们想要添加一个新的 ReadModel 数据库,我也有同样的担忧。似乎应用程序越旧,使用得越多,获得最新的 readmodel 就越困难和昂贵。还是我在某个地方错过了一个技巧?ReadModel 快照之类的东西?
2) 如果在重播所有数百万个事件以备份读取数据库之后,一些数据与预期不符(即看起来错误),会发生什么情况。人们认为,可能是事件存储中的某个错误或非规范化例程可能导致了这种情况(似乎如果在编码中可以依赖一件事,那就是错误)。如何去调试这个!这似乎是一项不可能完成的任务。或者,也许,我又错过了一个窍门。
我很想听听任何已经运行这样的系统一段时间的人的意见,维护和升级路径是如何为您解决的。
感谢您的任何时间和投入。