MongoDB 索引的创建注意事项、以及建索引导致锁库的解决方案

                          MongoDB索引的创建注意事项

       在数据量超大的情形下,任何数据库系统在创建索引时都是一个耗时的大工程。MongoDB也不例外。因此,MongoDB索引的创建有两种选择,一个是前台方式,一个是后台方式。那这两种方式有什么差异呢,在创建索引时是否能观察到索引完成的进度呢。本文将是基于此的描述,同时也描述了索引创建相关的注意事项。

1.索引创建方式

前台方式: 

        缺省情况下,当为一个集合创建索引时,这个操作将阻塞其他的所有操作。即该集合上的无法正常读写,直到索引创建完毕

        任意基于所有数据库申请读或写锁都将等待直到前台完成索引创建操作

后台方式:

        将索引创建置于到后台,适用于那些需要长时间创建索引的情形

        这样子在创建索引期间,MongoDB依旧可以正常的为提供读写操作服务

        等同于关系型数据库在创建索引的时候指定online,而MongoDB则是指定background

        其目的都是相同的,即在索引创建期间,尽可能的以一种占用较少的资源占用方式来实现,同时又可以提供读写服务

        后台创建方式的代价:索引创建时间变长

        后台创建索引的示例:

        db.people.createIndex( {  zipcode: 1}, { background: true} )

        db.people.createIndex( {  city: 1}, { background: true, sparse: true } )

注意:缺省情况下background选项的值为false。 

2.索引创建期间注意事项

       如前所述:基于后台创建索引时,其他的数据库操作能被完成。但是对于mongo shell会话或者你正在创建索引的这个连接将不可用,直到所有创建完毕。如果需要做一些其它的操作。则需要再建立其它的连接。

       在索引创建期间,即使完成了部分索引的创建,索引依旧不可用,但是一旦创建完成即可使用。

       基于后台创建索引期间不能完成涉及该集合的相关管理操作

       repairDatabase

       db.collection.drop()

       compact

       意外中断索引创建

       如果在后台创建索引期间,mongod实例异常终止,当mongod实例重新启动后,未完成的索引创建将作为前台进程来执行

       如果索引创建失败,比如由于重复的键等,mongod将提示错误并退出

       在一个索引创建失败后启动mongod,可以使用storage.indexBuildRetry or --noIndexBuildRetry跳过索引创建来启动

3.索引创建

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值