EventStore vs.MongoDb

EventStore vs.MongoDb,mongodb,event-sourcing,eventstoredb,Mongodb,Event Sourcing,Eventstoredb,我想知道在MongoDb中使用EventStore()比自己实现事件源有哪些优势 我问的原因是,我们公司每天都有很多人在MongoDb工作。不过,它们不与事件源一起工作。虽然他们对这个主题还不是完全一无所知,但他们也不会在任何地方开始实施它 我即将开始一个项目,这是非常适合活动采购。大约有16个定义明确的事件,以及7个定义明确的投影。我之所以说“关于”,是因为我知道,一旦他们看到正在使用的产品,就会有更多的预测和活动需求 该方法将首先使用API,我们组织的其他部分将使用REST API 虽然我已

我想知道在MongoDb中使用EventStore()比自己实现事件源有哪些优势

我问的原因是,我们公司每天都有很多人在MongoDb工作。不过,它们不与事件源一起工作。虽然他们对这个主题还不是完全一无所知,但他们也不会在任何地方开始实施它

我即将开始一个项目,这是非常适合活动采购。大约有16个定义明确的事件,以及7个定义明确的投影。我之所以说“关于”,是因为我知道,一旦他们看到正在使用的产品,就会有更多的预测和活动需求

该方法将首先使用API,我们组织的其他部分将使用REST API

虽然我已经阅读了很多关于Greg Young定义的事件源的内容,但我从未真正实现过事件源解决方案

这是一个绿地项目。没有技术限制,因为我们将把所有内容都公开为REST接口。因此,如果有人有与MongoDb合作的EvenStore或活动采购经验,请告诉我

还有一个几乎完全不相关的关于活动来源的问题:
您是否直接查询过事件存储?或者您是否总是创建新的投影和重播事件来填充这些投影?

因为其他回复没有提到EventStore中的工具或优点,而只提到MongoDB的优点,我将插话。但请注意,我的经验是有限的

我先从犯人开始

  • 有很多签入可以决定您将积极支持自己的版本。虽然团队一直在巩固他们的版本,但他们在发布后不到18个月就达到了版本3,这应该是一个指标,表明您必须为另一个更新版本(这也可能会影响您选择部署到的平台)调出支持的版本
  • 它不可能在每个平台上都能轻松工作(尤其是当您尝试移动到云环境或基于docker的lxc容器时)。其中一部分原因是社区围绕着其他星展银行,如Mongo。但该团队似乎一直在努力提高读/写性能,同时保持跨平台的稳定性。随着时间的推移,我发现你不想偏离太远的裸机操作系统实现,这在当今时代是没有吸引力的
  • 使用特殊版本的Mono。寻找对旧版本Mono的支持只会让这个过程更像根管
  • 要充分利用EventStore的性能,您确实需要考虑您的体系结构。EventStore输出到平面文件和事件数据可以快速增长。您将数据持久化到的磁盘的故障率是多少。事情是如何压缩的?存档?等等。您有很多控件,该控件用于将数据存储为事件。然而,尽管我相信Greg Young本人可以向我郑重地介绍长期优化和保存磁盘的功能,但我很可能会找到一个成熟的Mongo社区,该社区曾遇到过类似的情况
而专业人士

  • 休息-这是AtomPub。您的流是否不够具体?创建另一个http,直到你心满意足。关心路由的人做一个http转发。出于安全考虑,将http代理放在前面。简单
  • 您有一套很好的工具和UI,可以在事件开始生成新数据时测试和构建投影(例如,使用chrome浏览器调试投影…是的,它们是用java脚本编写的)
  • 读取性能-由于应用程序输出到一个平面文件,您可以获得内核级缓存,并通过http将其公开。此外,索引还可以跨流查询针对较大数据集的预测(但我确实感觉到索引性能会随着时间的推移逐渐提高)

我个人不会将其用于核心/任务关键型/或不断增长的应用程序!然而,如果你有一个使你的活动环境保持有趣的附带条件,那么我就让它去吧!我个人现在必须坚持使用Mongo。

免责声明我是Greg Young(如果你看不懂我的名字:)


我将回答这个问题,尽管我相信它无论如何都可能被删除。这个问题对我来说有点奇怪,但答案却相当奇怪。我不会花时间单独回答每个回复,而是将我的所有评论都放在这个回复中

1) 有一个评论,我们只运行在一个自定义版本的单声道,这是一个细节,但。。。事实并非如此(一年多以来都不是如此)。我们正在等待我们为mono制作的关键补丁(例如threadpool.c来攻击他们的主机)。这已经发生了

2) EventStore是3条款BSD许可的。不知道你怎么能说我们不是开源的。我们也有一家公司支持它,并提供商业支持

3) 有人提到我们将在9月升级到第3版。第1版是2年前发布的。版本2增加了集群(显然,与单个节点相比,有一些突破性的变化)。第3版增加了很多东西,包括拥有竞争对手的能力。在这段时间里,实际的客户端协议几乎没有变化(特别是对于那些使用HTTP API的用户)

然而,建议中真正让我不安的是,他们似乎不理解他们在比较什么。这大致相当于我说“我应该使用neo4j还是leveldb?”。您可以在leveldb上构建自己的图形数据库,但这将是相当多的工作

在这种情况下,Mongo是事件存储上的存储引擎,OP必须自己编写。作品的写作