Mongo索引创建对Spring应用程序部署的影响

cxfofazt  于 2022-10-30  发布在  Spring
关注(0)|答案(2)|浏览(145)

我正在处理一个Spring应用程序,它有一个包含大量数据的mongo集合。我需要在该集合上创建一个索引。我将使用Mongobee/Mongock之类的迁移框架来创建索引。我想知道这个索引的创建会影响Spring应用程序部署的持续时间吗?如果我将索引创建的background属性设置为true会怎样?
基本上,我希望的情况是:

  • 应用程序的部署不应受到索引创建的任何影响
  • 索引创建应该在后台进行,同时mongo应该能够在该集合上提供查询
pqwbnv8z

pqwbnv8z1#

在提出此类问题时,请始终确保包括您正在运行的版本。在与答案相关的版本之间,通常会有重要的行为变化。
一般来说,background索引创建会完成您所需要的工作,也就是说,这样的索引构建不会锁定集合,并允许应用程序在索引构建过程中继续运行。
也就是说,foregroundbackground索引构建的概念已经不存在了。从4.2开始,所有索引构建都是在后台有效地完成的(如果在发出创建索引的命令时提供了background参数,则忽略它)。您可以在这里阅读更多关于这方面的内容。
值得一提的是,您也可以选择在a rolling manner on a replica set中构建索引。Atlas中的集群可以选择自动使用此技术,或者您也可以手动执行此技术。但这并不常见,特别是在4.2版本中引入了新的索引构建方法之后。

gv8xihay

gv8xihay2#

虽然@user20042973的答案是正确的,而且非常有用,但它只适用于MongoDB。
然而,如果我没猜错的话,你也在担心蒙格克的行为,以及它可能会如何影响你的部署。
@user20042973上面解释的内容,结合Mongock中runner-type: applicationrunner的使用,将提供您正在寻找的内容:

  • 应用程序启动并处理请求,而不等待Mongock完成。
  • MongoDB在构建索引时可用(对于MongoDB版本+=4.2)
  • 服务的所有示例的部署都将启动并提供服务,而无需等待Mongock的锁(不要与MongoDB的锁混淆)。

但是,值得一提的是:
1.您提到了mongock配置属性indexCreation。这里没有什么要做的,它是针对内部Mongock的结构的。这是应用程序没有权限创建索引的用例。
1.如果ChangeUnit创建索引失败并引发异常,则应用程序将中止。
1.如果不使用runner-type: applicationrunner,而是使用runner-type: initializingbean,则会得到相反的行为。

  1. runner-type: applicationrunner是默认值

相关问题