使用连续 运行ning 应用程序 运行 mongock 安全吗?

Is it safe to run mongock with a continuously running application?

我们有一个 运行 作为 Kubernetes 中的 24x7 服务的应用程序,我们无法将其归结为 运行 我们的迁移脚本。我只是想验证 mongock 框架不会干扰我们应用程序的操作 - 例如,通过长时间锁定集合。

我知道这个问题听起来很宽泛,因为迁移的 impacts/effects 取决于我们在 ChangeLog/ChangeSets 中编写的代码。

但我想知道 mongock 框架本身是否对 mongo 集合有任何影响,除了它自己的内部集合(mongockChangeLog 和 mongockLock )

例如,mongock 是否对 mongo 集合以外的集合持有任何锁?

我假设 mongockLock 拥有的锁不会对 mongockChangeLog 以外的任何集合产生影响。

同样,启用交易后,mongock 是否拥有任何可能影响或影响我们代码拥有的交易的交易?

你的机构是对的。 Mongock 的锁只是内部的。同样值得知道的是,您可以配置这个锁被占用多长时间,Mongock 等待它多长时间,如果它无法获取它以及它将尝试多长时间。 Mongock's documentation

中的所有内容

谈到事务,Mongock 将事务完全委托给底层框架。我没有完全理解你的问题,但是我可以解释一下 Mongock 提供的交易类型,你可以更好地了解其影响。

  • All or nothing: 整个Mongock进程被包裹在一个事务中,如果任何一点失败,整个迁移都会被回滚。(currently提供)
  • Per changeSet(method):每一个成功执行的changeSet都会被提交。如果中途失败,则回滚。(5版本会提供)
  • Per changeLog(class):整个changeLog class被包裹在一个事务中,所以只有当它的所有changeSet都被提交时才会被提交成功执行。(将在版本5中提供)

一般来说,推荐的组织迁移的方式是根据变更日志。 changeLog 应该代表一个迁移步骤,它不应该以特性方法设计。例如,如果您的模型中有 Client 和 Bill,则不应为 Client 设计一个 changeLog 并为 Bill 设计另一个 changeLog,在它们中包含您随时间应用的不同迁移。相反,您应该以 changeLog 代表迁移步骤的方式来执行此操作,影响整个模型,以便您可以通过 changeLogs 识别您的迁移历史。 从这点来看,Mongock的最佳实践是使用per changeLog transactions