标签: event-store

何时使用Eventstore

我不太清楚我理解Eventstore是什么,我认为它是Domainobjects的某种"Transactionlog".它的优点/缺点是什么?使用它的好方案是什么,什么时候不应该使用它?

编辑:

既然我可能要求太多,我会很高兴,如果有一个"简单"的场景何时使用eventstore而不是?换句话说:是否可以用一些句子来描述这两个场景,或者我是否需要阅读5本书来理解它?

.net domain-driven-design cqrs event-store

30
推荐指数
2
解决办法
3450
查看次数

NEventStore和GetEventStore有什么区别

最近我正在学习CQRS,并希望改变我的系统以使用事件采购模式.

但我发现在.Net平台上,有两个Event Store实现.

  1. NEventStore(前身为JOliver EventStore)
  2. EventStore(来自GetEventStore.com)

这两个实现让我很困惑 - 有人可以解释一下它们之间的主要区别.

cqrs event-store ncqrs get-event-store

28
推荐指数
1
解决办法
3919
查看次数

CQRS:存储事件并发布它们 - 如何以安全的方式执行此操作?

正如我已经了解到为什么CQRS存储库发布事件而不是事件存储?这是CQRS存储库发布事件的任务.到现在为止还挺好.

当然,存储事件并发布它们应该在一个单一的事务中.从技术上讲,这意味着将一个(或多个)记录写入商店,并将一个(或多个)事件发布到消息总线.因此,简单的数据库事务是不够的,它应该是分布式的.

现在,不幸的是,许多NoSQL数据库(例如MongoDB)不支持符合ACID的事务,甚至没有谈论在分布式事务中发生的可能性.此外,还有一些消息队列也不支持分布式事务.

所以问题是:我该如何处理?

是否有推荐使用的模式?

transactions cqrs event-sourcing event-store

25
推荐指数
1
解决办法
4796
查看次数

使用CQRS读取侧实现方法

我已经转移到积极使用CQRS +事件采购的项目.从第一眼就看出它是按照所有这些书籍和博客实现的,但最后我意识到实施中究竟是什么样的暴躁.

这是CQRS架构:CQRS设计

本来我从这里拍了这张照片.

正如我们在图片中看到的那样,读取端从队列接收事件并将其逐个传递到不同的投影集(非规范化器)中,然后通过AddOrUpdate方法将结果的ViewModel保存到DB中.因此我从图片中了解到,denormalizer只能依赖事件本身加上来自读取端db的数据.例如:

  1. 帐户视图已存储在数据库中.
  2. EmailChanged活动到来
  3. 我们从数据库中读取了帐户视图
  4. 应用电子邮件更改
  5. 我们将帐户保存回数据库.

另一个案例(计算一些项目的数量,说订单):

  1. OrderCreated事件到来
  2. 我们读取了ViewModel,它表示NumberOf以前到达的订单
  3. 增加并保存.

我们在项目中拥有的内容:我们仅将所有这些事件用作域模型中某些内容发生变化的通知程序.因此,我们做了什么:

  1. 我们使用域存储库并读取所有必需的聚合.这样做我们得到了它们的最新状态.
  2. 我们只是从头开始构建ViewModel对象
  3. 将新创建的对象保存到Db中

我们在项目中使用的方法对我来说有点奇怪,但我看不出它的所有缺点.如果我们需要重建我们的读取端,我们添加"active"denormalizer,并在下次收到特定事件时,重新创建新的viewmodel.

如果我们使用书中的方法,我将不得不在我的系统之外的某个地方有一个单独的utils逻辑用于重建.我们需要什么:

  1. 放下阅读面
  2. 从头开始阅读事件存储中的所有事件
  3. 将它们穿过投影

所以我的问题是:
这里的正确方法什么?

cqrs event-sourcing event-store

19
推荐指数
1
解决办法
5003
查看次数

EventSourcing应用程序中的用户身份验证

我正在研究使用DDD + CQRS + EventSourcing制作应用程序,我在确定如何进行用户身份验证方面遇到了一些麻烦.

用户本质上是我的域的一部分,因为他们负责客户.我正在使用ASP.NET MVC 4,我希望只使用SimpleMembership.由于登录和授权用户是同步操作,如何在最终一致的架构中解决这个问题?

我是否必须滚动自己的auth系统,在读取端保留非规范化的auth表?如何处理这个的安全性?我最终会在我的事件存储区和视图表中存储密码哈希值吗?

这么多问题,如果有人能说清楚,我会非常感激:)

tldr; 你如何在EventSource应用程序中进行用户身份验证?

authentication authorization cqrs event-sourcing event-store

15
推荐指数
2
解决办法
3301
查看次数

CQRS事件存储的结构

我目前正在尝试了解如何构建事件存储的内部结构.到目前为止我得到了什么:

  • 事件存储有两个表(集合,...),一个用于聚合,一个用于事件.
  • 聚合表包含以下数据:( aggregateId可能是GUID)和aggregateVersion(这是一个整数,它只表示影响此聚合的最后一个事件的编号).
  • 事件表包含以下数据:( eventId同样,GUID),aggregateId(事件所属)payload,和a version(它只是描述事件顺序的整数).

到目前为止这是正确的吗?应该使用整数来排序事件吗?或者他们应该根据时间戳订购?每个有什么好处?有什么缺点?

cqrs event-store

13
推荐指数
1
解决办法
7886
查看次数

事件采购 - 如何删除事件存储中的数据?

如何解决在事件存储中删除数据的问题?

我需要永久和完全删除一些数据,以遵守隐私法.

我找到了这些替代方案:

  1. 加密需要删除的数据,并将加密密钥存储在自己的表中.当需要删除数据时,只删除加密密钥.

  2. 对不需要删除的数据使用事件源,参考CRUD数据库获取需要删除的机密数据.

有没有其他方法可以做到这一点?

events cqrs event-sourcing event-store

13
推荐指数
2
解决办法
4971
查看次数

CQRS数据存储方法Nosql或Sql Server

我正在进行一个新项目的研究阶段,目前我正与一位工作同事就该项目的架构进行辩论.

我们已经同意我们将使用CQRS和使用azure的事件源来创建分布式消息传递系统.它将是一个SPA,前端使用角度js,后端将是Web API.

我们现在讨论了如何设置数据库,这就是发生差异的地方.

我们同意将数据库拆分为两个数据库,一个用于读写.我的同事想要将sql server用于读写数据库,因为他在sql中度过了他的整个职业生涯并且除了sql之外不想听到任何其他内容.另一方面,我一直在研究NoSql,我觉得它适合读取数据库,因为它更适合性能.

由于CQRS完全是关于最终的一致性,我已经读过NoSql数据库也基于此,现在让我考虑将NoSql用于写入数据库.

我们还计划为每个聚合根创建一个事件表,而不是一个包含所有事件的通用事件表.由于这些表不是关系型的,因此我想到为什么我们应该使用sql server.

我的问题更多的是人们如何创建活动商店的最佳实践或一般方法.

  1. 您是为所有事件使用一个表还是为每个聚合根创建一个事件表?
  2. 将NoSql数据库用于CQRS应用程序的写入和读取数据库的优点/缺点是什么?
  3. 最后但并非最不重要的是,您如何说服与Sql结婚的顽固工作同事转换为NoSql方法?

nosql cqrs event-sourcing event-store

12
推荐指数
2
解决办法
5736
查看次数

CQRS事件存储聚合与投影

在CQRS事件存储中,"聚合"是否包含事件的汇总视图或仅仅是对这些事件边界的引用?(组ID)

投影是事件的视图或表示,因此在聚合表示对我有意义的边界的情况下,而如果聚合包含当前的汇总状态,我会对两者之间的重复感到困惑.

aggregate projection cqrs event-sourcing event-store

11
推荐指数
1
解决办法
5142
查看次数

Event Store 3.0 - 吞吐量/性能

我一直在试验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 event-store

10
推荐指数
2
解决办法
3620
查看次数