2014-02-28 34 views
2

我拥有一个使用Neo4j作为图形数据库的应用程序。在Neo4j的数据库:
我隔,以实现该命令模式和优化我的请求(页面请求),整个共享同一个数据库中读取和写入(以下CQRS建议)。 (并非两个不同)DDD /在图形数据库中存储域事件

现在我打算存储一些域事件,如UserRegisteredEvent等,以便通过在Actor(Akka)中托管的某些事件处理程序进行排队。

是否有意义存储在共享数据库域的事件,在我的情况下,简单的Neo4j节点?
或者我真的需要一个tierce数据库,比如MySQL吗?

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

+0

虽然看的Neo4j同样的想法,我恍然大悟,所以想必其他人也必须考虑到这一点?这似乎是非常有意义的,因为事件与图形密切相关,因此图形数据库似乎是一个明显的选择......您是否进一步研究过这个问题? – Schalk

+0

@Schalk最后,我通过与相应节点“模型”建立直接关系来存储事件。如果事件是“UserCreatedEvent”,我创建一个链接到“User”的节点“UserCreatedEvent”。我有一个调度程序,可以检索标签“New”(Neo4j 2.0)处理的所有新事件。 – Mik378

回答

3

如果您可以通过某种方式关联存储的事件,或者您希望将更多信息添加到可以使用关系或属性表示的这些事件,则图形数据库(在您的案例中是neo4j)是查询以来的方式将比一个(或不那么)规范化的rdbms快得多。

在未来也可以很容易地没有采取SQL的关怀和已经增加了对实体缺少的属性添加更多的属性。

从我的角度来看

因此,添加事件节点共享的Neo4j数据库是一个更好的方法,即使是简单的节点,因为查询被制作成子图,它不会影响你的业务领域。

+0

这正是我想到的:)谢谢 – Mik378

+0

即使不需要序列化事件,因为Neo4j是NoSql数据库,意思是没有模式。 – Mik378

+1

很高兴我们在同一页:)但请选择一个答案或将其修改为wiki。 – amb

1

我对Neo4j并没有太多的了解,但是没有规则说您必须使用RDBMS作为事件存储 - 只要您可以在sequenece中编写和读取一组事件(作为对象序列化/反序列化)基于一个聚合ID然后你的好。