在提出此类问题时,请始终确保包括您正在运行的版本。在与答案相关的版本之间,通常会有重要的行为变化。 一般来说,background索引创建会完成您所需要的工作,也就是说,这样的索引构建不会锁定集合,并允许应用程序在索引构建过程中继续运行。 也就是说,foreground和background索引构建的概念已经不存在了。从4.2开始,所有索引构建都是在后台有效地完成的(如果在发出创建索引的命令时提供了background参数,则忽略它)。您可以在这里阅读更多关于这方面的内容。 值得一提的是,您也可以选择在a rolling manner on a replica set中构建索引。Atlas中的集群可以选择自动使用此技术,或者您也可以手动执行此技术。但这并不常见,特别是在4.2版本中引入了新的索引构建方法之后。
2条答案
按热度按时间pqwbnv8z1#
在提出此类问题时,请始终确保包括您正在运行的版本。在与答案相关的版本之间,通常会有重要的行为变化。
一般来说,
background
索引创建会完成您所需要的工作,也就是说,这样的索引构建不会锁定集合,并允许应用程序在索引构建过程中继续运行。也就是说,
foreground
和background
索引构建的概念已经不存在了。从4.2
开始,所有索引构建都是在后台有效地完成的(如果在发出创建索引的命令时提供了background
参数,则忽略它)。您可以在这里阅读更多关于这方面的内容。值得一提的是,您也可以选择在a rolling manner on a replica set中构建索引。Atlas中的集群可以选择自动使用此技术,或者您也可以手动执行此技术。但这并不常见,特别是在
4.2
版本中引入了新的索引构建方法之后。gv8xihay2#
虽然@user20042973的答案是正确的,而且非常有用,但它只适用于MongoDB。
然而,如果我没猜错的话,你也在担心蒙格克的行为,以及它可能会如何影响你的部署。
@user20042973上面解释的内容,结合Mongock中
runner-type: applicationrunner
的使用,将提供您正在寻找的内容:但是,值得一提的是:
1.您提到了mongock配置属性
indexCreation
。这里没有什么要做的,它是针对内部Mongock的结构的。这是应用程序没有权限创建索引的用例。1.如果ChangeUnit创建索引失败并引发异常,则应用程序将中止。
1.如果不使用
runner-type: applicationrunner
,而是使用runner-type: initializingbean
,则会得到相反的行为。runner-type: applicationrunner
是默认值