DDD /在事务锁定类型是悲观时存储域事件的良好实践

时间:2014-12-22 12:25:48

标签: database architecture neo4j domain-driven-design database-locking

在练习DDD时,一个好的技术模式是在同一个数据库事务中存储与创建/更新的模型相关的事件

一个简单的例子,我们假设一个Meeting实体和一个允许创建Meeting的功能。 它应该生成一个CreatedMeetingEvent,我存储在我的数据库中,在我的案例中是Neo4j。

为了从Neo4j的图形性质中受益,我选择存储这样的事件:

(createdEvent)-[:CREATED]->(meeting)

createdEvent将包含一些"元数据"如occurredOn时间戳等。

请注意,neo4j采用锁定事务,其规则为:

  

创建或删除关系时,将执行写锁定   具体关系及其两个节点。

因此,我无法在同一交易中插入新创建的meeting节点和相应的事件。 => pessimistic locking

我不想将这笔交易分成两部分? 实际上,基本上,如果事件保存在不同的交易中,可能会发生潜在的不一致。

如何处理此案? 隔离图中的事件,保持与meetingId属性的模型的逻辑链接? 会......浪费..

E / S可以解决问题,因为无需插入任何模型 但是,就我的申请而言,E / S不会带来任何其他优势。

0 个答案:

没有答案