在CQRS中反规范化的最佳做法是什么?

问题描述 投票:4回答:1

我正在尝试创建一个deamon来反规范化我的数据库。

我使用ActiveMQ作为队列管理器我有2个数据库:关系一(写+复制),非规范化(读取)

我的问题是,对我的真实数据库进行反规范化的最佳做法是什么我有一些想法:

  • MySQL代理(带lua)读取队列(这是可能的)
  • 在MySQL中触发
  • Java守护程序作为读取队列的服务
  • Cron标签? (但是我会有很长的延迟时间
php mysql daemon activemq cqrs
1个回答
3
投票

我不确定这是否是官方的“最佳”做法,但总的来说,我发现事件采购和使用事件来推动写入和更新读取模型是一个很好的做法。 通过事件源,写模型本身并不作为关系数据库中的实体和关系,而是作为事件历史(我知道这听起来很混乱)

您可以通过查看Eventide如何实现它来了解更多关于事件采购的知识(在Ruby中) https://eventide-project.org/

我还在此处使用域事件简要介绍了CQRS: http ://lucisferre.net/2010/11/04/a-brief-introduction-to-cqrs/

但是,这并不能真正回答您当前的问题,最终事件采购可能不适合您。 由于您已将“写入”模型的状态存储在关系数据库中,因此触发器是一种可行的方法,但随后您将使系统非常以数据为中心。 如果您可以使用代码中的触发器完成相同的操作,那将会更清晰,更可测试。

为此,我仍然会使用域事件模式,并使用事件总线将事件发布到负责更新读取模型的事件处理程序。

想想这些事件和处理程序,比如SQL触发器,但是基于域设计和行为。 Udi Dahan有很多关于这种方法的好材料,其中域事件用于更新读取模型,但不使用事件源。 http://www.udidahan.com/?blog=true

© www.soinside.com 2019 - 2024. All rights reserved.