在应用程序实例之间进行用户友好的数据迁移

时间:2019-02-04 23:53:09

标签: java spring-boot data-migration

我们有一个基于Web的系统,本质上是一个调查应用程序。 到目前为止,我们一直将新的调查直接加载到数据库中(作为飞行路线迁移)。这显然是长期不可行的,我们需要将创建新调查的权力交到管理员用户手中。其中一个方面是添加UI,以便管理员用户可以创建新调查。

但是,我们希望管理员用户先在测试环境中创建和测试任何新调查,然后再将其放任生产。由于这些调查很复杂,因此存在真正的风险,即在测试环境中进行的调查与某人在生产环境中进行的调查存在细微的差异。我的目标是消除这种风险。

我的问题与我们可以实施的技术机制有关,以便管理员用户可以在自助服务的基础上从其测试环境“迁移”调查(他们已经在其中完成了所有测试和验证) )到生产环境-这样我们就可以高度肯定迁移的调查将被相同地设置。 Moodle之类的应用程序已经内置了此类功能。

我考虑过:

  • 允许用户创建调查的校验和(也许基于所有元素的哈希码),以便他们可以知道两个环境中的调查是相同的。然后的问题是,试图找到两个实例的调查之间的确切差异会很烦人。
  • 编写一个将原始SQL转储为导出的UI,并允许这些用户将其直接放入生产数据库中,但是从很多角度来看,这都是非常糟糕的事情
  • 构造我们自己的特定于域的语言来描述这些调查-但是编写输入/输出解析器似乎太复杂了
  • 将数据转储到JSON(假设它是RESTful Web应用程序,大部分已经完成)并吸回其中

在这个阶段,我倾向于JSON方法,但是希望听到其他可以轻松集成到Spring Boot应用程序中以帮助完成此过程的想法或库。

1 个答案:

答案 0 :(得分:1)

说实话,通过引入独立实例来解决此类问题听起来像一个可怕的主意:不仅迁移部分很棘手。您必须始终确保兼容性。想象一下,管理员使用的版本过旧或未正确配置他的实例(每个管理员的梦想)。即使迁移本身不会产生任何错误,最终结果也可能会有所不同(这就是您实际上要避免的情况)。

据我了解,您当前将调查视为大量原始信息,这些原始信息以某种方式出现在数据库中,然后由应用程序显示。从这个角度来看,您显然无法分辨测试调查和生产调查之间的区别。

这就是为什么您应该扩展模型!

不只是一项调查。有一个调查草稿和/或一个调查预览区域,一个用户要经历的调查创建过程,一个旋转产品的过程从草稿等进行调查。

如果将这些概念添加到应用程序中,那么所描述的用例应该很容易实现(您已经提到了计划的UI,对吧?)。

希望我能帮助您。抱歉,我知道它不能完全回答您的问题。