MongoDB–分布式的索引建立
一:在独立的服务器上建立索引
在独立的服务器上建立索引,可以在空闲时间在后台执行,以减轻服务器的性能开销。服务器建立索引的时候不支持读写请求。
>db.foo.ensureIndex({"name":1,"background":true})
//background选项,这样在创建索引的时候如果有读写请求,创建的过程会暂定一下
二:在副本集上建立索引
在集合比较大的情况下,如果直接在主节点建立索引,当索引被复制到其他节点上,带来的后果可能是所有的备份节点同时开始建立索引,突然间所有的备份节点都无法被客户端读取了。同时可能也无法进行同步复制。
推荐采用隔离创建索引的方法:
1.禁用复制链,将chainingAllowed=false
2.关闭一个备份节点服务器
3.将这个服务器以单机模式启动
4.在单机模式下创键索引
5.索引创建完成之后,将服务器作为副本集成员重新启动
6.对副本集的每个备份节点重复2~5步现在除了主节点其他的复制集成员都创建了索引,现在有两个方式:
1)在主节点是创建索引(在主节点创建索引期间,不可用,可以修改读选项,在备份节点读取数据)
主节点创建索引完成之后,由于备份节点已经有了同样的索引,实际上不会再创建索引
2)让主节点退位为备份节点,也执行上面的2~5步。在主节点退位了普通节点期间,新的主节点被选出来,保证系统正常运行。创建完索引,重新添加进副本集。注意:
与其他节点索引不同的节点,应该将优先级设置为0;
创建唯一索引的时候必须保证主节点中没有被插入重复的数据,否则备份节点备份数据会报错
三:分片集群上建立索引
分片集群建立索引,需要现关闭均衡器。再在每个分片上建立索引,建立索引的步骤和在副本集上建立索引是一样的。
四:删除索引
1.查看索引
//查看集合中的索引
mongos> db.table1.getIndexes()
2.删除索引
//删除指定集合的索引,参数1:集合,参数2:索引
>db.runCommand({"dropIndexes":"foo","index":"nams_hashed"})
//删除所有的索引,_id索引除外
>db.runCommand({"dropIndex":"foo","inndex":"*"})
注:删除文档不会对索引产生影响