gpt4 book ai didi

.net - CQRS、事件溯源和 NoSQL 数据库

转载 作者:可可西里 更新时间:2023-11-01 09:13:18 24 4
gpt4 key购买 nike

我们正在启动一个新项目,我们希望在该项目中使用 MongoDB 实现 CQRS + 事件溯源架构。我们已经对 CQRS 方法有了一些经验:在我们之前的项目中,我们以 Fohjin 框架为起点(好吧,我们对其进行了重大重构)。我们使用 Oracle 作为存储,并且在这种情况下还使用 TransactionScope 实现了 2PC。

但是对于我们的新项目,由于其可扩展性和性能,我们希望使用 MongoDB。我们绝对希望将它用于读取(报告)部分并将其用于事件存储。这里的替代方法是使用 SQL Server 进行事件存储。所以我们需要做出选择。我不喜欢混合解决方案的是 TransactionScope,它既昂贵又缓慢,而且必须支持不同的 Db 类型(Mongo 和 SQL)。

我们查看了 NCQRS,但似乎我们不想高度依赖任何框架,它规定了很多可以从我们的角度不同地实现的东西。所以现在我们正在考虑一些更轻量级的东西,比如 Jonathan Oliver 的 Event Store。我喜欢流和提交的概念,它还支持 MongoDB。我仍然不明白的是,它如何处理所有 2PC 的东西(据说是针对 NoSQL 的)。在我们的例子中,我们需要将事件分配给几个事件处理程序:某种类型的分解器,它为特定类型的事件更新读取数据库和任务调度器。如果这些处理程序出现问题并且我们得到一个异常,则无法回滚 MongoDB 的提交。有什么技巧可以解决这个问题吗?

我很感激任何关于如何做出正确决定以及利弊的评论。

最佳答案

EventStore 使用 Guid 来唯一标识对数据库的提交,以防止同一事件流被多次持久化。通常,此 Guid 直接嵌入消息中,唯一标识该特定消息,并可在调用事件流上的 CommitChanges 时用作 CommitId。在系统的查询端处理事件时,您可以使用类似的方法。

关于 2PC 和避免分布式事务的更多信息:

关于.net - CQRS、事件溯源和 NoSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com