cqrs - 为什么使用 GUID 作为 EventStore 数据库中 EventSources 和 Events 表中 Id 字段的类型?

标签 cqrs event-sourcing

为什么使用 uniqueidentifier(相当于 .NET 中的 GUID)作为 EventSources 和 Events 表中 Id 字段的类型?

使用充当标识的整数类型(如 SQL Server 中的 bigint)不是更快吗?这样数据库就可以在执行插入时分配 Id?

在事件溯源和 CQRS 方面,我是一个完全的新手,因此,如果有人询问并回答了这个问题,而我的搜索不够正确,无法找到答案,我深表歉意。

最佳答案

注意:答案 2 和 4 假设您遵循领域驱动设计的一些基本原则。

  1. ID 在不同聚合类型甚至不同限界上下文中应该是唯一的

  2. 每个聚合必须始终处于有效状态。拥有唯一的 ID 是其中的一部分。这意味着在存储初始事件以及数据库生成并返回相应的 ID 之前,您无法对聚合执行任何操作。

  3. 发送初始命令的客户端通常需要某种引用来将创建的聚合关联起来。 客户端如何知道已分配了哪个 ID?请记住,命令是无效的,除了 ack/nack 之外,它们不会返回任何内容,甚至不会返回 ID。

  4. 领域问题(实体的识别)将严重依赖技术实现细节(这实际上应该是#1)

关于cqrs - 为什么使用 GUID 作为 EventStore 数据库中 EventSources 和 Events 表中 Id 字段的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914043/

相关文章:

c# - 来自管道行为的 MediatR 流畅验证响应

php - CQRS 中的反规范化/投影数据

domain-driven-design - 如何使用 DDD 为 StackOverflow 网站建模

java - EventSource 中的错误处理

microservices - 基于微服务的事件存储

events - 事件源: where to put business logic

java - 使用 Axon 4 与某些 "aggregateIdentifier"相关的 Axon Replay TrackingEvent

domain-driven-design - 没有业务属性的聚合或实体

events - 事件中的非原始类型

event-sourcing - 聚合间通信