我正在进行一个新项目的研究阶段,目前正与一位同事就该项目的架构进行辩论。
我们已经达成共识,将使用CQRS和事件溯源在Azure上创建一个分布式消息传递系统。它将是一个SPA,前端使用Angular JS,后端将是Web API。
我们现在讨论数据库如何设置,这就是不同之处。
我们已经同意将数据库分为两个,一个用于读取,一个用于写入。我的同事想要在读写数据库中都使用SQL Server,因为他整个职业生涯都在使用SQL,不想听其他任何东西。而我则一直在研究NoSql,认为它更适合用于读取数据库,因为它在性能方面更好。
由于CQRS都是关于最终一致性的,我了解到NoSql数据库也基于这一点,这使我开始考虑将NoSql用于写入数据库。
我们还计划为每个聚合根创建一个事件表,而不是包含所有事件的通用事件表。由于这些表不是关系型的,这让我想知道为什么我们应该使用SQL Server。
我的问题更多地是关于人们如何创建他们的事件存储的最佳实践或一般方法。
- 您是将所有事件用一个表存储,还是为每个聚合根创建一个事件表?
- 对于CQRS应用程序,使用NoSql数据库作为读写数据库的优缺点是什么?
- 最后但并非最不重要的,您如何说服一个固执己见、一心只用SQL的同事去接受NoSql方法?