我们目前正在评估CQRS和事件溯源架构。我试图理解使用这种设计的维护影响。我正在努力找到答案的两个问题是:
1)如果在应用程序运行一段时间后,有一个新的要求需要向ReadModel数据库中的ViewModel添加一个额外的字段呢?例如,在以前未考虑的情况下,客户邮政编码在CustomerList ViewModel上是必需的。因此,可以轻松地将额外的列添加到ViewModel数据库中,但是如何填充它?就我所见,唯一的方法是清除read database,并从头开始重放所有事件以重新构建ReadModel Database。但是,如果应用程序已经运行了几个月或几年(我们希望它能够),那么这可能是要重放数百万个事件,仅仅为了添加一个Zipcode列的数据。
如果由于某种技术原因,ReadModel Database不同步,或者我们想添加一个新的ReadModel database,我有相同的担忧。似乎应用程序越老,使用越多,就越难、越昂贵地获取最新的readmodel。或者我错过了什么技巧?类似于ReadModel快照之类的东西吗?
2)如果重放几百万个事件以重新构建read database后,发现一些数据与预期不符(即,它看起来有错误)。认为可能是事件存储或去规范化例程中存在某个错误(如果有什么可以依赖编码的东西,那就是错误)。如何调试这个问题!它似乎是一个不可能的任务。或者,也许我又错过了什么技巧。
我很想听听任何长期运行此类系统的人,他们的维护和升级路径是如何工作的。
感谢您花费时间和参与。
1)如果在应用程序运行一段时间后,有一个新的要求需要向ReadModel数据库中的ViewModel添加一个额外的字段呢?例如,在以前未考虑的情况下,客户邮政编码在CustomerList ViewModel上是必需的。因此,可以轻松地将额外的列添加到ViewModel数据库中,但是如何填充它?就我所见,唯一的方法是清除read database,并从头开始重放所有事件以重新构建ReadModel Database。但是,如果应用程序已经运行了几个月或几年(我们希望它能够),那么这可能是要重放数百万个事件,仅仅为了添加一个Zipcode列的数据。
如果由于某种技术原因,ReadModel Database不同步,或者我们想添加一个新的ReadModel database,我有相同的担忧。似乎应用程序越老,使用越多,就越难、越昂贵地获取最新的readmodel。或者我错过了什么技巧?类似于ReadModel快照之类的东西吗?
2)如果重放几百万个事件以重新构建read database后,发现一些数据与预期不符(即,它看起来有错误)。认为可能是事件存储或去规范化例程中存在某个错误(如果有什么可以依赖编码的东西,那就是错误)。如何调试这个问题!它似乎是一个不可能的任务。或者,也许我又错过了什么技巧。
我很想听听任何长期运行此类系统的人,他们的维护和升级路径是如何工作的。
感谢您花费时间和参与。