MongoDB中创建索引需要注意的事项
上周在ruby-china上发了帖子《MongoDB那些坑》,反映相当热烈,许多回复很有见地,其中一位童鞋深入的提到MongoDB建索引方法的问题,引发我更深入的了解了MongoDB建索引的方法和一些注意事项。
在《MongoDB那些坑》中提到,在前台直接运行建立索引命令的话,将造成整个数据库阻塞,因此索引建议使用background的方式建立。但是这也会带来一定的问题,在2.6版本之前,在secondaryserver中即使使用background方式建立索引,secondary还是会以foreground方式建立索引,它导致secondary同样引发数据库阻塞问题。2.6版本修复了这个Bug,2.6版之后使用background方式建立索引时,真正转向后台运行了。
为了尽量降低建立索引对MongoDBServer的影响,有一种方法是把MongoDBServer转换成standalone模式后建立。具体做法如下:
1.首先把secondaryserver停止,在取消--replSet参数,并且更改MongoDBport之后重新启动MongoDB,这时候MongoDB将进入standalone模式;
2.在standalone模式下运行命令ensureIndex建立索引,建议使用foreground方式运行;
3.建立索引完毕之后关闭secondaryserver按正常方式启动;
4.根据上述1~3的步骤轮流为secondary建立索引,最后把primaryserver临时转换为secondaryserver,同样按1~3的方法建立索引,再把其转换为primaryserver。
这种方式还是比较麻烦的,但可以把建立索引操作对MongoDB的影响降到最低,在有些情况下还是值得做的。