database - 微服务和数据库更改
问题描述
我们将数据库的微服务和 DDL 脚本作为 jar 文件中的资源,使用 liquibase/flyway 部署在启动微服务上。DDL 看起来不错。
如何处理 DML?我们应该用 DML 脚本构建新的 jar 文件,然后重新部署微服务吗?还是对数据库和微服务进行单独部署会更好?
如何在环境(dev、sit、uat 等)之间导出/导入数据?
如果微服务支持 CRUD 操作,我们可以使用微服务来导出/导入数据吗?即在开发环境中,我们设置数据,然后导出到 json,并使用微服务和 json 在 uat 上导入。
解决方案
奥列格,好问题。我建议将数据库部署与应用程序部署分开,并为两者采用 GitOps 策略 (CD)。
管道将部署 DB(应用 DDL),您将控制流程——这就是所谓的 DataOps 实践。 https://www.truedataops.org
应用程序和数据库之间的这种分离有助于您在可维护性方面(微服务架构的一个关键目标)。
关于从环境迁移数据,有很多工具可以非常有效地帮助这种工作,每个数据存储通常都有一个。
例如,Oracle GoldenGate 可以帮助这个过程。 https://www.oracle.com/integration/goldengate/
但是我想知道为什么您要从与产品生命周期的不同阶段相关的环境中迁移数据(开发数据通常是非生产数据,在开发阶段拥有生产数据也不是最佳实践——安全/保护问题)。
推荐阅读
- unit-testing - 使用 VS Code 运行 ASP .Net 核心应用程序的 NUnit 测试用例
- python - PI3D 纹理导入的 obj 模型,就好像它是一个高程图
- javascript - 如何将通过浏览器上传的文件转换为字节?
- r - R 列表包 ict.reg 不会运行
- c# - C# DocusignAPI 复合模板与服务器模板上的选项卡
- android - 如何在我的 ProgressBar 下方放置一个按钮?
- sql - 使用本地与在 aws rds 上使用时,Knex 返回不同的响应
- javascript - 使用 CSS 根据文本值对 div 的文本进行着色
- javascript - 在模块中 res.send() 之后停止 res
- java - 尽管这两个字符相同,但条件的行为就好像它们在 java 中不一样