我们有一个应用程序在Kubernetes中作为24x7的服务运行,我们不能把它取下来运行我们的迁移脚本。我只是想验证一下,蒙古框架不会干扰我们的应用程序的操作——例如,通过锁定一个集合过长一段时间。
我知道这个问题听起来很宽泛,因为迁移的影响/效果取决于我们在ChangeLog/ChangeSets中编写的代码。
但是我想知道mongo框架本身是否对mongo集合有任何影响,除了它自己的内部集合(monckchangelog和moncklock)
例如,在mongo集合上,除了它自己的锁外,是否还持有其他锁?
我假设moncklock拥有的锁不会对除了monckchangelog之外的任何集合产生影响。
同样地,当事务被启用时,蒙古是否拥有任何可能影响或影响我们代码所拥有的事务?你的机构是对的。蒙克的锁只是内部的。此外,值得了解的是,您可以配置这个锁被占用多长时间、monock等待多长时间、如果它无法获取它,以及它将尝试多长时间。所有这些都在Mongock的文档
说到事务,Mongock将事务完全委托给底层框架。我不完全理解你的问题,但是我可以解释一下monock提供哪种类型的交易,这样你就可以更好地了解它的影响。
- 要么全部要么没有:整个Mongock进程被封装在一个事务中,如果它在任何时候失败,整个迁移将被回滚。当前提供的() 每个变更集
- (方法):每个成功执行的changeSet都被提交。如果它在中间失败了,它就会回滚。(将在版本5中提供) 每更新日志
- (类):整个changeLog类被封装在一个事务中,所以只有当它的所有changeSets都成功执行时,它才会被提交。(将在版本5中提供)
一般来说,建议按照changeLog来组织迁移。变更日志应该代表一个迁移步骤,它不应该以特性方法来设计。例如,如果您的模型中有Client和Bill,那么您不应该为Client和Bill设计一个变更elog,其中包含您在一段时间内应用的不同迁移。相反,您应该以这样一种方式进行,即变更elog代表一个迁移步骤,影响整个模型,这样您就可以通过变更elog确定您的迁移历史。从这个角度来看,Mongock的最佳实践是每个changeLog使用交易