事件溯源和导入 Flat/XML 文件

Event Sourcing and Importing Flat/XML Files

我在一家金融公司工作。我们收到了数百万个平面文件和 xml 文件并导入到 SQL 服务器数据库中,在这个特定系统中没有 Api 数据。

是否应将事件溯源用于此类系统,以将平面文件 ETL 导入数据库?我一直认为事件溯源更多地用于前端 Web 应用程序,因此我们可以跟踪所有数据,并将事件重播到读取模型中。

谢谢,

事件溯源是 CQRS 架构写入端的一种特殊类型的持久性,可以更好地捕获系统状态而不会造成任何损失。事件的历史记录用于写入端,也用于读取端。

在您的情况下,如果您认为在每个命令之前从事件流中重建状态比使用 flat/already-computed 状态更好,那么请使用事件源,否则不要使用。如果您仍然想要事件的历史记录,您可以使用仅用于重建旧读取模型(以防它们不同步或发现 BUG)或构建新读取模型的事件日志。

Should Event Sourcing be utilized for this type of system, for flat file ETL import into database?

以我有限的经验,拿别人的平面数据并试图从中获取 "events" 是徒劳的。

通过记录所有事件的历史来跟踪您将其他人的平面数据加载到您的系统中的过程...可能很有趣;但它基本上就像一个 warehouse system,您可以在其中跟踪发生的事情 - 文件写入磁盘、转换完成、导入完成 - 并创建报告。

同样考虑到方程式,您是否要授予模型对接下来发生的事情的控制权?

这不是一个非常适合大量投资和定制代码的问题(说真的,您是否希望您的公司从 ETL 加载过程的出色表现中获得竞争优势?或者您只是构建它是因为你找不到合适的买?)

事件溯源用于存储(跟踪)域状态 发生的变化。那些 xml 文件基本上是导入的。您可以将这些导入映射到内部命令,从而生成可以存储的域事件。 如果您的应用程序是使用 ES 设计的,那么命令出现在何处并不重要(大多数情况下)。

如果你编写那个导入组件并考虑专门为此使用 ES,那不是一个好主意。 activity 本身就很粗糙,ES 旨在处理复杂的域(业务)模型。