当前位置: 首页 > 知识库问答 >
问题:

将遗留数据库迁移到cqrs/事件采购视图

巢德华
2023-03-14

我们需要重写具有复杂业务逻辑的旧遗留应用程序。我们考虑使用cqrs和事件源。但是不清楚如何从旧数据库迁移数据。可能我们只需要将其迁移到读取数据库,因为我们不能复制所有事件来填充事件存储。但是我们至少需要在事件存储中为每个聚合创建一些初始记录,例如Aggregate Created?或者我们需要编写一个脚本,并使用所有命令一个接一个地重新创建聚合,就像我们通常使用事件源一样?

共有2个答案

孔理
2023-03-14

可能我们只需要将其迁移到读取数据库

不可以,您的读取模型数据库可以随时根据写入端删除和重新创建,只有写入端是您的事实来源。

但是我们至少需要在事件存储中为每个聚合创建一些初始记录,比如AggregateCreated?

当然,只有最初的活动是不够的。如果当前OrderAggregate有预订,则必须为其拥有的每个预订创建ItemReservedEvent。

或者我们需要编写一个脚本并使用所有命令逐个重新创建聚合,就像我们通常使用事件源一样?

感觉这就是你应该走的路。从数据库中读取旧的聚合/实体,并尝试将其映射到新的集合/实体。

容鸿畴
2023-03-14

使用现有数据库或其转换版本作为读取端持久性的开始从来都不是一个好主意。您的事件源系统需要启动,因此您可以获得事件源的主要好处之一——能够使用多语言持久性按需创建投影。

使用命令进行迁移也不是一个好主意,原因很简单,根据定义,命令可能会由于不变控制的前置或后置条件检查而失败。它也没有传达迁移的含义,即表示当前的系统状态。请记住,当前的系统停留不是你可以接受或否认的。它是给你的,你的工作就是抓住它。

这种迁移的最佳实践是发出所谓的迁移事件,如EntityXMigratedFromLegacy。当然,这项工作可能是实质性的。主要是因为遗留系统模型很可能与新模型不匹配,否则这种迁移的原因并不完全清楚。

通过使用迁移事件,您可以按原样显式声明一段状态是从另一个位置移动的。您将始终知道迁移的实体如何在新系统中开始其生命周期 - 通过从旧系统迁移或在新系统中初始化。

 类似资料:
  • 虽然Django最适合用来开发新的应用,但也可以将它整合到遗留的数据库中。Django包含了很多工具,尽可能自动化解决这类问题。 这篇文章假设你了解Django的基础部分,它们在教程中提及。 一旦你的Django环境建立好之后,你可以按照这个大致的流程,整合你的现有数据库。 向Django提供你的数据库参数 你需要告诉Django你的数据库连接参数,以及数据库的名称。请修改DATABASES设置,

  • 我正在寻找最好的方法来迁移我的应用程序数据库,它使用firebase实时数据库到新的云Firestore数据库。对于我正在进行的项目,我确信我不需要做任何数据模式的更改,所以我几乎只是尝试1-1映射它。Firebase在他们的网站上建议只编写一个脚本来实现这一点,但我不确定最好的方法。有没有人已经做了一个脚本来完成这件事?

  • 问题内容: 我正在使用Java开发数据库迁移工具。该工具将数据库表及其数据复制到目标数据库。但是我希望它可以在不同的数据库上工作。从mysql复制并在derby等中创建。使用JDBC,我们可以收集有关表及其列的足够信息。但是我要问的是,是否可以使用sql free在Java上重新创建表。我的意思是不同的数据库具有不同的数据类型,有时它们在sql语法上也有所不同。那么JDBC或任何其他库(可以是开放

  • 在开发和维护一个数据库驱动的应用程序时, 数据库的结构会像代码一样不断演变。 例如,在开发应用程序的过程中,会增加一张新表且必须得加进来; 在应用程序被部署到生产环境后,需要建立一个索引来提高查询的性能等等。 因为一个数据库结构发生改变的时候源代码也经常会需要做出改变, Yii 提供了一个 数据库迁移 功能,该功能可以记录数据库的变化, 以便使数据库和源代码一起受版本控制。 如下的步骤向我们展示了

  • 简介 迁移就像是数据库的版本控制, 允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和 Laravel 的 数据库结构生成器配合使用,让你轻松地构建数据库结构。如果你曾经试过让同事手动在数据库结构中添加字段,那么数据库迁移可以让你不再需要做这样的事情。 Laravel 的 Schema 门面 对所有 Laravel 支持的数据库系统提供了创建和操作数据表的相应支持。 生成迁移 使用 Art

  • 数据库迁移可以理解为对数据库结构的版本管理,可以有效的解决团队中跨成员对数据库结构的管理。 生成迁移 通过 gen:migration 生成一个迁移文件,命令后面跟的是一个文件名参数,通常为这个迁移要打算做的事情。 php bin/hyperf.php gen:migration create_users_table 生成的迁移文件位于根目录下的 migrations 文件夹内,每个迁移文件都包