DDD /在图数据库中存储域事件

时间:2014-02-28 09:47:52

标签: architecture neo4j domain-driven-design cqrs

我拥有一个使用Neo4j作为图形数据库的应用程序 我分开读写(遵循CQRS建议)以实现命令模式并优化我的请求(页面请求),整个共享一个相同的数据库:neo4j数据库。 (不是两个截然不同的)

现在我计划存储一些域事件,例如UserRegisteredEvent等,以便由Actors(Akka)中托管的一些事件处理程序出列。

将域事件存储在共享数据库中是否有意义,在我的例子中是简单的Neo4j节点?
或者我真的需要一个像数据库一样的数据库吗?

我确切地说,我的解决方案不需要事件采购。

2 个答案:

答案 0 :(得分:3)

如果您可以以某种方式关联存储的事件,或者您想要向这些可以用关系或仅属性表示的事件添加更多信息,那么图形数据库(在您的情况下为neo4j)是一种方法,因为查询将是比一个(或不那么)规范化的rdbms快得多。

此外,您将来可以轻松添加更多属性,而无需考虑已添加的实体的SQL和缺失属性。

因此,从我的角度来看,将事件节点添加到共享neo4j数据库是一种更好的方法,即使对于简单的节点也是如此,因为查询被制作成子图,并且不会影响您的业务领域。

答案 1 :(得分:1)

我对Neo4j并没有太多关注,但是没有规则说你必须使用RDBMS作为事件存储 - 只要你能在后续基础上编写和读取一组事件(作为序列化/反序列化的对象)在一个聚合id上然后你的好。