我想知道使用EventStore(http://geteventstore.com)比在MongoDb中自己实现事件采购有什么好处。
我问的原因是,我们公司有很多人每天与MongoDb合作。但它们不适用于Event Sourcing。虽然他们并没有完全关注这个主题,但他们也不会在任何地方开始实施它。
我即将开始一个非常适合Event Sourcing的项目。大约有16个定义明确的事件,大约有7个定义明确的预测。我说“约”,因为我知道一旦他们看到正在使用的产品,就会需要更多的预测和事件。
这种方法将首先是API,我们组织的其他部分将使用REST Api。
虽然我已经按照Greg Young定义的方式阅读了很多关于事件采购的内容,但我从未实际实施过Event Sourcing解决方案。
这是一个绿色的田野项目。没有技术限制,因为我们将把所有内容公开为REST接口。因此,如果有人有使用MongoDb的EvenStore或Event Sourcing的工作经验,请赐教。
关于事件采购的几乎完全不相关的问题: 你有没有直接查询事件存储?或者你总是会创建新的预测和重播事件来填充这些预测吗?
答案 0 :(得分:48)
免责声明我是Greg Young(如果你不能读我的名字:) :()
我会回答这个问题,但我相信它可能会被删除。这个问题对我来说有点奇怪,但答案相当奇怪。我没有花时间单独回答每个回复,而是将我的所有评论都放在这个回复中。
1)有评论说我们只在自定义版本的单声道上运行,这是一个细节但是......情况并非如此(并且已经超过一年了)。我们正在等待我们对mono进行的关键补丁(例如threadpool.c来击中他们的主人)。这已经发生了。
2)EventStore是3条款BSD许可。不确定你怎么声称我们不是开源的。我们还有一家公司,并提供商业支持。
3)有人提到我们将在9月份继续使用第3版。第1版于2年前发布。版本2添加了群集(显然与单个节点相比有一些重大变化)。版本3增加了大量的东西,包括拥有竞争消费者的能力。在这段时间内,实际的客户端协议几乎没有变化(特别是那些使用HTTP API的人)。
然而,在建议中对我来说真正令人不安的是,他们似乎并不理解他们在比较什么。这大致相当于我说"我应该使用neo4j还是leveldb?"。你可以在leveldb之上建立一个图形数据库,但这将是相当多的工作。
在这种情况下,Mongo将是OP必须自己编写的事件存储中的存储引擎。如果您想要进行最基本的操作,那么在存储引擎上编写生产质量事件存储是一项非常重要的工作。
我写了this in response to the mailing list equivalent of this question:
您将如何使用Mongo执行以下操作?:
使用排序/乐观并发/等方式向/从流中写入和读取事件
然后:
您的投影不希望以与编写它们相同的方式从流中读取,投影通常对事件类型感兴趣,并且希望所有类型为T的事件,无论是否以正确的顺序写入流。
您可能还希望能够将实时从推送事件通知切换到处理拉取信息(例如轮询)等。
如果比较Kafka,datomic和Event Store会更有意义。
答案 1 :(得分:6)
看到其他回复并没有谈到EventStore中的工具或好处,只提到MongoDB的好处,我会说。但请注意我的经验有限。
我将从缺点开始......
和优点......
我个人不会将此用于核心/任务关键/或不断增长的应用程序!但是,如果你有一个侧面的案例来保持你的环境有趣,那么我会放弃它!我个人现在必须坚持使用Mongo。