我正在尝试创建一个守护程序来非规范化我的数据库。
我使用 ActiveMQ 作为队列管理器我有 2 个数据库:关系数据库(写入 + 复制)和非规范化数据库(用于读取)
我的问题是非规范化我的真实数据库的最佳实践是什么我有一些想法:
- 读取队列的 MySQL 代理(使用 lua)(这可能吗)
- 在 MySQL 中触发
- Java 守护进程作为读取队列的服务
- cron 选项卡?(但我会有很大的延迟时间
我不确定这是否是官方的“最佳”实践,但总的来说,我发现事件溯源和使用事件来驱动读取模型的写入和更新是一个很好的实践。通过事件溯源,写入模型本身并不作为关系数据库中的实体和关系,而是作为事件的历史(我知道一开始听起来很混乱)
您可以通过查看 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