我们正在启动一个新的项目,希望使用CQRS+事件溯源架构和MongoDB实现。我们已经有了一些使用CQRS方法的经验:在之前的项目中,我们以Fohjin框架为起点(好吧,我们对它进行了重构)。我们使用Oracle作为存储,并在那种情况下实现了带TransactionScope的2PC。
但是对于我们的新项目,由于MongoDB的可扩展性和性能,我们想使用它。我们肯定要将其用于读取(报告)部分,并考虑将其用于事件存储。这里的替代方案是使用SQL Server进行事件存储。因此,我们需要做出选择。我不喜欢混合解决方案中昂贵且缓慢的TransactionScope,以及支持不同的Db类型(Mongo和SQL)的必要性。
我们看过NCQRS,但似乎我们不想高度依赖任何框架,因为它会规定很多从我们的角度可以实现不同的东西。所以现在我们想找什么更轻量级的东西,比如Jonathan Oliver的Event Store。我喜欢流和提交的概念,它也支持MongoDB。但我仍然不理解它如何处理所有那些2PC的东西(它声称适用于NoSQL)。在我们的情况下,我们需要将事件分派给多个事件处理程序:某种更新读取数据库的去规范化器和某些类型的事件的任务调度程序。如果这些处理程序出了问题并且我们得到了一个异常,就没有办法回滚MongoDB的提交。有什么技巧可以处理这个问题吗?
我欣赏任何关于如何做出正确决策以及利弊的评论。
但是对于我们的新项目,由于MongoDB的可扩展性和性能,我们想使用它。我们肯定要将其用于读取(报告)部分,并考虑将其用于事件存储。这里的替代方案是使用SQL Server进行事件存储。因此,我们需要做出选择。我不喜欢混合解决方案中昂贵且缓慢的TransactionScope,以及支持不同的Db类型(Mongo和SQL)的必要性。
我们看过NCQRS,但似乎我们不想高度依赖任何框架,因为它会规定很多从我们的角度可以实现不同的东西。所以现在我们想找什么更轻量级的东西,比如Jonathan Oliver的Event Store。我喜欢流和提交的概念,它也支持MongoDB。但我仍然不理解它如何处理所有那些2PC的东西(它声称适用于NoSQL)。在我们的情况下,我们需要将事件分派给多个事件处理程序:某种更新读取数据库的去规范化器和某些类型的事件的任务调度程序。如果这些处理程序出了问题并且我们得到了一个异常,就没有办法回滚MongoDB的提交。有什么技巧可以处理这个问题吗?
我欣赏任何关于如何做出正确决策以及利弊的评论。