CQRS设计模式更新

时间:2012-05-31 03:33:47

标签: database design-patterns cqrs

我正在寻求实施CQRS模式。对于更新读取数据库的过程,最好是使用Windows服务,还是在更新数据库中创建新记录时更新视图?最好使用触发器还是其他一些过程?我已经看到了几种方法,但我还没有决定实现这一目标的最佳方法。

感谢。

2 个答案:

答案 0 :(得分:1)

我个人喜欢用消息来解决这些问题。

您的命令会在处理事件时产生事件,如果您使用消息传递来发布事件,则一个或多个下游读取服务可以订阅事件并处理它们以更新读取模型。

在这种情况下,消息传递很好的原因是它允许您将写入和读取端相互分离。此外,如果您需要它,它允许您轻松拥有多个订阅者。此外,使用像MSMQ这样的持久排队系统进行消息传递可以重试失败的消息。它还意味着您可以脱机读取模型(用于更新等),当它恢复时,它可以处理队列中的所有事件。

我不是关系数据库中触发器的朋友,但我认为必须非常难以测试。触发器会引入不属于它的路由逻辑。也可能是因为如果触发操作失败,整个写入事务会回滚吗?触发器可能是最不利的解决方案。

答案 1 :(得分:0)

这取决于您的申请在最终一致性方面的宽容程度。

如果你的应用程序没有读取数据5分钟的问题,则无需在每次写入数据更改时进行非规范化。在这种情况下,例如,每隔n分钟启动一次或仅在CPU消耗低于某个阈值时启动的后台服务可能是一个很好的解决方案。

另一方面,如果您的应用程序是时间敏感的,例如在频繁更改状态,机器监控,证券交易所数据等的情况下,那么您将希望保持尽可能低的滞后和非规范化在现场 - 即在进行中或至少是实时的。因此,在这种情况下,您可以选择在持续运行的过程中运行非规范化程序,或者直接在代码中将它们添加到事件处理程序链中。

你的电话。