MongoDB 创建索引的进阶知识;复制集/分片集该怎么创建索引?

一、关于foreground/background index build
在4.2以前,MongoDB创建索引有两种方式,一种是foreground,前台创建,一种是background,后台创建。
默认情况下是使用foreground的方式创建索引,这种方式会对表所属的数据库持有一个排它锁,所有对该库的读写都会被堵,例如listDatabases需要对所有库的读锁,执行这个操作会被堵塞。

可以通过在创建时指定background:true来选择后台创建方式,例如db.test.createIndex( { name: 1 }, { background: true } )。
后台创建方式是运行在后台,不会对其他会话的读写操作造成堵塞,但是相应的索引创建速度也会更慢。需要注意的是,创建索引的会话也是会被堵塞至索引创建成功,而不是发出命令之后就能返回继续操作。

无论是前台还是后台的方式,创建索引都会产生一定的性能负载,还是尽可能安排在空闲窗口去操作。

4.2版本的新特性
从4.2开始,创建索引不再有前台和后台的区别,即使在命令里指定background:true也不会有用。
而是采用新的创建方式:只在索引创建起始和结束阶段持有表的排它锁;在创建中间过程是持有意向锁,在此期间不堵塞表的读写操作。

二、创建索引与使用内存
创建索引需要用到内存,默认使用内存的上线是500M,如果超过500M的限制,就会用到临时磁盘文件,具体是在dbpath下新建一个名为_tmp的子目录。创建索引使用的内存限制可以通过参数maxIndexBuildMemoryUsageMegabytes来设置。

三、复制集和分片集的轮流索引创建方式
复制集和分片集由于存在集群关系和主从复制的特点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值