最新版的mongodb无法后台创建索引吗?官网显示background是deprecated状态,会被解释器过滤。我现在有上百个集合,想给它们中的某些关键字段做索引,只能前台做吗?或者有什么提高效率的方法?求助。
从4.2版本开始,已经不区分区前台还是后台创建索引,无需要指定background参数。在系统空闲或者集合不忙的情况,4.2版本创建索引效率接近4.2之前版本使用前台创建效率。再也不用担心前台创建索引问题。
如果系统很繁忙的情况下,可以使用滚动创建索引方式.即先从库进入维护模式下创建索引,然后进行主备切换,再次执行索引。这个对繁忙系统影响最小。需要关注:1、Oplog的保留窗口是否足够 2、是否存在SPA架构,此时从库宕机后,应用使用writeConcern:majority会存在问题。 3、如果备库特别多,手动执行相对麻烦。 否则一般在主库或者mongos执行索引即可。
MongoDB本身没有这个daemon方式,你在server端通过js或者shell方式eval方式执行命令,通过系统nohup &来在后台运行。这个不存在ssh端口问题,你可以通过db.currentOp或者执行脚本打印日志来监控索引创建情况。类似Oracle、Mysql都没有提供demon方式创建索引,都存在ssh中断问题,通常都是采用系统级别守护进程来执行。
还没看最新版,不过一般来说,之前版本 background 这个状态是大家都会加的,也就是说,新版本估计默认都是background,而且只能是background了。
之前有没有加background的区别:
- 加了background:索引后台创建,数据写入没有阻塞
- 没加background:数据写入时会有阻塞,待索引创建完成后数据库才可以进行写入。
谢谢回答,可能我的意思没有表述清楚。我的集合数量非常多,并且数据量很大。在创建索引的过程中mongosh一直是阻塞住的。这很考验我的ssh网络环境,一旦ssh断掉,创建索引的过程就会中断。有没有办法让这个操作在后台运行呢?
如果担心网络问题,可以在跟mongodb 同一个机房找一台服务器,装上客户端,通过这客户端执行创建索引语句,然后后台执行,这样即使你本地网络出问题了,也不会断掉。
其实,当你在MongoDB创建索引后,即使你的客户端跟MongoDB断开连接,底层下的数据节点仍然是会在创建的,这个你可以看下数据库日志,都有索引创建进度的。
不过鉴于你集合量多,创建索引多,最好还是找台同机房服务器去创建,这样方便点,也不用太担心网络问题。
谢谢回答,可能我的意思没有表述清楚。我的集合数量非常多,并且数据量很大。在创建索引的过程中mongosh一直是阻塞住的。这很考验我的ssh网络环境,一旦ssh断掉,创建索引的过程就会中断。有没有办法让这个操作在后台运行呢?