我不太清楚我理解Eventstore是什么,我认为它是Domainobjects的某种"Transactionlog".它的优点/缺点是什么?使用它的好方案是什么,什么时候不应该使用它?
编辑:
既然我可能要求太多,我会很高兴,如果有一个"简单"的场景何时使用eventstore而不是?换句话说:是否可以用一些句子来描述这两个场景,或者我是否需要阅读5本书来理解它?
最近我正在学习CQRS,并希望改变我的系统以使用事件采购模式.
但我发现在.Net平台上,有两个Event Store实现.
这两个实现让我很困惑 - 有人可以解释一下它们之间的主要区别.
正如我已经了解到为什么CQRS存储库发布事件而不是事件存储?这是CQRS存储库发布事件的任务.到现在为止还挺好.
当然,存储事件并发布它们应该在一个单一的事务中.从技术上讲,这意味着将一个(或多个)记录写入商店,并将一个(或多个)事件发布到消息总线.因此,简单的数据库事务是不够的,它应该是分布式的.
现在,不幸的是,许多NoSQL数据库(例如MongoDB)不支持符合ACID的事务,甚至没有谈论在分布式事务中发生的可能性.此外,还有一些消息队列也不支持分布式事务.
所以问题是:我该如何处理?
是否有推荐使用的模式?
我已经转移到积极使用CQRS +事件采购的项目.从第一眼就看出它是按照所有这些书籍和博客实现的,但最后我意识到实施中究竟是什么样的暴躁.
这是CQRS架构:
本来我从这里拍了这张照片.
正如我们在图片中看到的那样,读取端从队列接收事件并将其逐个传递到不同的投影集(非规范化器)中,然后通过AddOrUpdate方法将结果的ViewModel保存到DB中.因此我从图片中了解到,denormalizer只能依赖事件本身加上来自读取端db的数据.例如:
另一个案例(计算一些项目的数量,说订单):
我们在项目中拥有的内容:我们仅将所有这些事件用作域模型中某些内容发生变化的通知程序.因此,我们做了什么:
我们在项目中使用的方法对我来说有点奇怪,但我看不出它的所有缺点.如果我们需要重建我们的读取端,我们添加"active"denormalizer,并在下次收到特定事件时,重新创建新的viewmodel.
如果我们使用书中的方法,我将不得不在我的系统之外的某个地方有一个单独的utils逻辑用于重建.我们需要什么:
所以我的问题是:
这里的正确方法是什么?
我正在研究使用DDD + CQRS + EventSourcing制作应用程序,我在确定如何进行用户身份验证方面遇到了一些麻烦.
用户本质上是我的域的一部分,因为他们负责客户.我正在使用ASP.NET MVC 4,我希望只使用SimpleMembership.由于登录和授权用户是同步操作,如何在最终一致的架构中解决这个问题?
我是否必须滚动自己的auth系统,在读取端保留非规范化的auth表?如何处理这个的安全性?我最终会在我的事件存储区和视图表中存储密码哈希值吗?
这么多问题,如果有人能说清楚,我会非常感激:)
tldr; 你如何在EventSource应用程序中进行用户身份验证?
authentication authorization cqrs event-sourcing event-store
我目前正在尝试了解如何构建事件存储的内部结构.到目前为止我得到了什么:
aggregateId可能是GUID)和aggregateVersion(这是一个整数,它只表示影响此聚合的最后一个事件的编号).eventId同样,GUID),aggregateId(事件所属)payload,和a version(它只是描述事件顺序的整数).到目前为止这是正确的吗?应该使用整数来排序事件吗?或者他们应该根据时间戳订购?每个有什么好处?有什么缺点?
如何解决在事件存储中删除数据的问题?
我需要永久和完全删除一些数据,以遵守隐私法.
我找到了这些替代方案:
加密需要删除的数据,并将加密密钥存储在自己的表中.当需要删除数据时,只删除加密密钥.
对不需要删除的数据使用事件源,参考CRUD数据库获取需要删除的机密数据.
有没有其他方法可以做到这一点?
我正在进行一个新项目的研究阶段,目前我正与一位工作同事就该项目的架构进行辩论.
我们已经同意我们将使用CQRS和使用azure的事件源来创建分布式消息传递系统.它将是一个SPA,前端使用角度js,后端将是Web API.
我们现在讨论了如何设置数据库,这就是发生差异的地方.
我们同意将数据库拆分为两个数据库,一个用于读写.我的同事想要将sql server用于读写数据库,因为他在sql中度过了他的整个职业生涯并且除了sql之外不想听到任何其他内容.另一方面,我一直在研究NoSql,我觉得它适合读取数据库,因为它更适合性能.
由于CQRS完全是关于最终的一致性,我已经读过NoSql数据库也基于此,现在让我考虑将NoSql用于写入数据库.
我们还计划为每个聚合根创建一个事件表,而不是一个包含所有事件的通用事件表.由于这些表不是关系型的,因此我想到为什么我们应该使用sql server.
我的问题更多的是人们如何创建活动商店的最佳实践或一般方法.
在CQRS事件存储中,"聚合"是否包含事件的汇总视图或仅仅是对这些事件边界的引用?(组ID)
投影是事件的视图或表示,因此在聚合表示对我有意义的边界的情况下,而如果聚合包含当前的汇总状态,我会对两者之间的重复感到困惑.
我一直在试验JOliver的Event Store 3.0作为项目的潜在组件,并一直试图通过Event Store来衡量事件的吞吐量.
我开始使用一个简单的线束,它基本上通过for循环迭代创建一个新流,并将一个包含GUID id和字符串属性的非常简单的事件提交给MSSQL2K8 R2 DB.调度员本质上是一个无操作员.
这种方法设法在8路HP G6 DL380上运行~3K操作/秒,数据库在单独的32路G7 DL580上运行.测试机器没有资源限制,阻塞看起来是我的限制.
有没有人有过测量Event Store吞吐量的经验以及取得了哪些数据?我希望能够获得至少1个数量级的吞吐量,以使其成为可行的选择.
cqrs ×10
event-store ×10
.net ×1
aggregate ×1
events ×1
ncqrs ×1
nosql ×1
projection ×1
transactions ×1