我实际上在 DDD 和 NoSql 领域徘徊。我现在有一个疑问:我需要从聚合中生成事件,并且我想使用 NoSql 存储。但是我如何确保事件保存在存储中并且聚合根上的更改没有事务?这有意义吗?有没有办法在不被迫使用事件源或事务数据库的情况下做到这一点?实际上我正在考虑实现一个两阶段提交算法,但从性能的角度来看它似乎很重......我是否以错误的方式解决问题?充满了问题......感谢恩里科的每一个建议
PS我是stackoverflow的新手,所以任何建议/批评/......都非常欢迎Enrico
编辑 1
那么我需要事件来通知聚合发生了一些事情,我他们应该对变化做出反应。当此类事件对业务逻辑很重要时,就会出现问题。据我了解,经过一夜的思考,我不能使用nosql存储来做这样的事情。让我解释一下(大声思考:P):
- 使用 ES(第一景):我保存数据的“差异”。然后我产生一个与之相关的事件。2 操作。
- 使用 ES(第二景):我保存数据的“差异”。一个进程,观察 ES 并产生事件。但我只拥有一个观察者进程来确保事件的正确顺序。
- 使用 ES(3d 场景):幂等事件。事件可以由状态推断,并且事件的每次重新应用只能导致消费者发生一次更改,可以有多个“出队”过程,不可能发生重复。1的操作,但它给消费者带来了很大的限制。
- 一般来说:我保存聚合的数据。然后我产生一个与之相关的事件。2 操作。
现在问题变得更广泛了恕我直言,当域事件是业务流程的基本部分时,是否可以使用域事件和 nosql?我认为这可能是一个更好的选择关系......即使我需要添加相当多的机器来获得相同的性能。
编辑2 为了完整起见,在google上搜索“域事件nosql幂等”:http: //svendvanderveken.wordpress.com/2011/08/26/transactional-event-based-nosql-storage/