摄影:产品经理
厨师:kingname
咱们在使用 MongoDB 的时候,会出现须要给一个已经存在的大集合的某个字段增长索引的状况。ide
索引分为前台索引和后台索引,对应到 pymongo 中建立索引的代码:3d
import pymongo handler = pymongo.MongoClient().yourdb.yourcol # 前台索引 handler.create_index('字段名') # 后台索引 handler.create_index('字段名', background=True)
若是集合里面有不少数据,而且你使用的是前台索引,那么此时,建立索引会把这个集合锁起来,全部对这个集合的写入操做都会挂起。直到索引建立完成为止。若是使用的是后台索引,那么建立索引的过程不会影响数据写入。code
但有时候,原本想建立后台索引,却忘记加 background=True参数。此时怎么办?由于大集合建立索引有时候可能须要好几个小时,挂起的写入数据会堆积在内存里面,把内存撑爆。blog
此时,千万不要重启 MongoDB,由于重启之后,以前没有完成的索引建立操做,依然会自动启动继续建立。索引
正确的作法是杀掉建立索引的进程。进程
此时,咱们能够在 MongoDB Shell 或者 Robo 3T里面操做。内存
这里以 Robo 3T为例,首先打开对应的集合,以下图所示:产品
而后把命令栏里面的内容修改成:it
db.currentOp()
返回的内容以下图所示:class
建立索引的进程,能够在参数里面看到相似于
"lockType": "write"
这样的字字段。在它附近,能够找到一个字段叫作 opid。
而后在命令栏输入命令:
db.killOp(opid)
杀掉进程。
而后从新建立后台索引便可。