【问题标题】:How to design MongoDB data model to store Event Sourcing events如何设计 MongoDB 数据模型来存储 Event Sourcing 事件
【发布时间】:2016-12-28 13:49:04
【问题描述】:

如果我为每个aggregate type 创建一个table(或document databases 中的document),我可以在重构write 侧的microservices 时合并数据库或对它们进行分片,结果是应用程序变得更具可扩展性,并且还提高了加载events 的速度。

在我这样设计event store 时,我应该注意哪些副作用?

编辑:

我目前正在使用MongoDb

如果我根据 aggregate id 创建一个 collection 会怎样? 或者每个aggregate type 一个database,每个aggregate id 一个collection ...?

这在性能、数据管理的便利性、可维护性或进一步的可扩展性方面是否存在问题?

【问题讨论】:

  • 您是在谈论 Table-Per-Aggregate-Type(每个事件在表中的一行)还是 Document-Per-Aggregate-Instance(每个实例一个文档,事件作为文档内的数组,所有聚合的单个集合)?
  • 这个问题是否可以更好地表述为“如何设计我的 MongoDB 数据模型来存储事件溯源事件”?
  • @guillaume3:这种事件数据设计,导致写入端的非线性事件存储(所有聚合都不是在单个表、文档或文件中排序...)我正在寻找它在不同情况下可以提供的问题(特别是 MongoDb)。例如,也许这样的设计对于 Sql 数据库是可以的,但对于 MongoDb 是不行的......
  • Carlos G:我添加了更多信息
  • @Mohsen 在什么方面可以?表现?易于数据管理?可维护性?进一步的可扩展性?如果您的问题是特定于 MongoDB 的,您应该在问题中提及它并添加标签。此外,Q 的标题似乎并没有传达这里真正的问题。

标签: mongodb database-design cqrs event-sourcing


【解决方案1】:

如果我创建单个表(或文档数据库中的文档),我可以在重构写入微服务时合并数据库或对它们进行分片,从而使应用程序变得更具可扩展性。

在我设计这样的事件存储时,我应该注意哪些副作用?

我还没有看到任何关于该设计的权威讨论。

在事件溯源社区中曾讨论过为每个类型的聚合创建一个单独的表。你可以找到那个讨论here。执行摘要:更有经验的从业者似乎对任何人会故意这样做感到震惊。

您应该记住的一件事是,虽然事件是真实的(它们描述了业务感兴趣的事物),但聚合是人为的。如果重新设计聚合边界要求您将事件移动到各处,您可能会不高兴。

以下内容可能会有所帮助

【讨论】:

  • :谢谢。答案不够明确;你能解释清楚一点吗?在句子中that 是什么意思:I haven't seen any authoritative discussion of that design....?谢谢你。
  • 我刚刚澄清了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
  • 2019-01-20
  • 2020-06-28
  • 2020-05-09
  • 2016-11-13
相关资源
最近更新 更多