让我首先说,我没有CQRS的实际经验,这就是这个问题的基础。CQRS和事件源与关系数据库设计结合
背景: 我建立一个系统,一个新的关键要求是允许管理员为“回放”用户操作(管理员希望能够步每一个发生在一个系统中任何特定点的动作) 。需要注意的是,该公司已经有了从当前SQL数据库生成的报表,它们不会更改(至少不会与此新需求并行),因此记录的存储将是SQL。我无法访问SQL的更改数据捕获,因此创建一大堆带触发器的历史记录表将非常难以维护,所以我想尽可能避免这种情况。最后,目前可能(目前还没有)很多数据入口点会经过版本生命周期,导致SQL db的更改(添加/删除字段),所以如果我试图在SQL中实现更改跟踪,我会必须维护处理旧版本数据的表格(噩梦)。
潜在的解决方案 我正在考虑使用的NoSQL(天青DocumentDB)来处理数据存储(写入),然后有命令处理程序处理更新当前SQL(Azure的SQL)的有关数据进行查询(读取) 。通过这种方式创建了审计跟踪,并且可以处理“回放”的想法,同时不会干扰当前提供的后端功能。
这种方法将满足要求并满足注意事项。我不会为整个应用程序使用CQRS,只是为了我需要这种“回放”功能的部分。我知道我必须缓解客户端的故障点 - >写入DocumentDB - >用成功/失败响应用户 - >写入成功的SQL写入DocumentDB路径,但我的新手CQRS的眼睛看不到原因为什么这不是一个很好的方法来处理这个问题。
任何意见将不胜感激。
[Change Feed](https://docs.microsoft.com/en-us/azure/documentdb/documentdb-change-feed)是否允许您侦听更改并将其应用于SQL数据库? –
更改Feed似乎正是我正在寻找的。我认为Dogu的回答更彻底地充实了可以解决我的问题的架构。我将使用ChangeFeed作为“消息队列”和一个监视该队列并相应地处理事务的辅助角色。 – JakeHova