MongoDB 变更的发布流程
Posted
技术标签:
【中文标题】MongoDB 变更的发布流程【英文标题】:Release process for MongoDB changes 【发布时间】:2020-09-19 20:48:57 【问题描述】:当它的 RDBMS 时,我使用 Liquibase 来部署目标数据库中的更改。这支持多租户并回滚到不同的版本。
在 Mongo 中,我试图找到等效的库并找到以下内容。
-
https://github.com/mongobee/mongobee - 需要 Java 技能。上次更新是 2 年前。
https://github.com/coldze/mongol - 只使用 Json。声誉低。
https://github.com/mongeez/mongeez - 有希望但非常过时。
https://github.com/tj/node-migrate - 在 jS 中完成,声誉优于其他人,但需要大量学习才能熟悉 IMO 这个框架。
对我来说,标准是,
-
必须可以从一个版本升级到任何新版本。
必须可以从当前版本降级到任何旧版本(应该具有执行复杂迁移的可行性。例如,参考不同的集合并从输出中分配一个计算值。
必须能够在执行前提取更改。主要用于验证目的。否则,在新构建部署期间,将单独执行更改。
易于采用,因此应避免大量学习。
你有一些其他的工作概念,很想知道。谢谢,
一个。
【问题讨论】:
Mongobee 已被废弃,但 Mongock 已经存在了一段时间,它已经启动并运行并提供了良好的功能和支持。文档位于mongock.io 【参考方案1】:Liquibase 的 mongodb 扩展刚刚问世。由于您熟悉 Liquibase,因此您可能会使用扩展名。 https://github.com/liquibase/liquibase-mongodb
【讨论】:
【参考方案2】:我不熟悉 Liquibase,我不确定您所说的“必须能够在执行前提取更改”是什么意思,但这是另一个有用的 MongoDB 特定选项,类似于 node-migrate: https://www.npmjs.com/package/migrate-mongo
另外,还有一篇文章解释了如何/为什么使用它: https://medium.com/javascript-in-plain-english/developer-story-db-migrations-mongodb-edition-7b36db8f2654
【讨论】:
【参考方案3】:有一个 - mongock.io,它类似于 Liquibase 的工作方式并且完美运行。下面是github地址: https://github.com/cloudyrock/mongock
【讨论】:
虽然这段代码可以回答这个问题,但最好在不介绍其他人的情况下解释它是如何解决问题的以及为什么要使用它。【参考方案4】:如果您使用 Java,一个很好的选择(我会说可能是最好的)是Mongock。
它提供了您需要的一切,并且路线图中有非常好的功能。
要开始使用(如果使用 Spring 5 和 Spring Data 3),您只需要:
-
将 Mongock 添加到您的 pom 中
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongock-bom</artifactId>
<version>4.1.17</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- ... -->
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongock-spring-v5</artifactId>
</dependency>
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongodb-springdata-v3-driver</artifactId>
</dependency>
-
将 Spring 和 MongoDB 依赖项添加到 pom 中
添加最低配置
mongock:
change-logs-scan-package:
- your.package.for.changelogs
-
在前面指出的包中创建您的更改日志:
your.package.for.changelogs
@ChangeLog(order = "001")
public class DatabaseChangelog
@ChangeSet(order = "001", id = "changeWithoutArgs", author = "mongock")
public void yourChangeSet()
// your migration here
-
将 Mongock 注解添加到您的 SpringBoot 应用程序
@EnableMongock
@SpringBootApplication
public class App
public static void main(String[] args)
new SpringApplicationBuilder().sources(App.class).run(args);
这只是对其工作原理的简要介绍。请查看documentation 了解更多信息。
披露:我是 Mongock 的作者之一。
【讨论】:
我不是 mongock 开发团队成员,但 Mongock 已在我们的团队中在生产中实现(Citi 创新),我强烈推荐它以上是关于MongoDB 变更的发布流程的主要内容,如果未能解决你的问题,请参考以下文章