MongoDB创建索引

太阳2年前技术文章908

一、后台创建索引

默认情况下,当我们对一个比较热点的集合创建索引时,直到索引创建完毕,该集合都是无法读写的。

1、后台创建索引语法

db.collection.createIndex( { filed: 1 }, { background: true } )

2、后台创建索引行为以及资源消耗

1)当使用后台创建索引时,不会阻塞对该集合的读写操作,但是在索引创建完成之前,会阻塞对该集合别的创建索引操作。

2)在创建索引期间,查询不会使用到未创建完毕的索引

3)MongoDB后台创建索引使用一种增量创建的办法,相对前台创建索引是要慢的,特别是当创建索引所需内存超过RAM的时候,尽量选择一个业务低峰期的时间窗口来做创建索引的操作

4)在创建索引时,如果达到了内存的限制,MongoDB会使用磁盘临时表,mongodb默认对内存使用的限制为500MB,也可以通过参数maxIndexBuildMemoryUsageMegabytes进行设置

5)在创建索引时候,如果mongod意外宕机导致创建索引中断,mongod服务默认重新启动后会前台重新创建索引,若在创建索引时报错,mongod程序会报错退出,可设置storage.indexBuildRetry参数控制mongod重启后是否前台重试创建索引。


二、单机/副本集下如何创建索引

1、单机

1)使用前台创建索引,创建索引期间需要持有global DB lock,阻塞所有读写操作

2)使用后台创建索引,创建索引期间不需要持有global DB lock,不会阻塞读写操作

2、副本集

1)在primary节点使用前台创建索引,primary节点在创建索引期间需要一个global DB lock,阻塞所有读写操作;secodary节点的复制线程在复制创建索引操作时也会持有global DB lock,阻塞对secondary节点的所有读操作。

2)在primary节点使用后台创建索引,primary节点和secondary节点在创建索引期间不需要global DB lock,不会阻塞该节点正常操作。

3)在副本集中最大程度减少创建索引对业务的影响,我们可以使用以下方法创建索引:

1.停止其中一个secondary节点并以单机模式启动

2.在该secondary节点创建索引,

3.重新以副本集模式启动该secondary节点

4.重复以上步骤对其他的secondary节点进行创建索引

5.将primary节点退位为seconary节点并创建索引

    rs.stepDown()

4)在副本集模式创建索引的一些注意点

1.如果单机模式创建唯一索引,需要停止对该集合的写入操作;否则推荐使用 db.collection.createIndex()创建索引。

2.在副本集创建索引时,需要保证secondary节点的oplog足够大,以便在创建索引成功后追上primary节点的同步。


相关文章

Spark on yarn 动态资源配置

Spark on yarn 动态资源配置

1、背景spark on yarn 的环境下,开源的spark 默认是关闭动态分配申请资源的。每次提交时,需要手动定义--num-executors 的数量。为了提交任务方便,需要开启动态分配资源sp...

CDH实操--CDH5.8.2升级(一)

CDH实操--CDH5.8.2升级(一)

1、摘要和概述本次升级是从cdh5.8.2升级至cdh6.2.1,由于cm对cdh的兼容性,需要先升级cm,从5.8.2升级至至6.2.1。2、升级CM2.1 CM安装文件2.2 CDH安装文件2.3...

阿里金融云经典网络和线下某银行实现网络互通

阿里金融云经典网络和线下某银行实现网络互通

需求某银行需要和某阿里金融云账号下的经典网络实例内网打通。已知不考虑将该服务器从经典网络类型迁移至VPC类型。阿里金融云环境下,之前是支持拉线下到经典网络专线的,但是目前和阿里侧核查,确认已不支持,仅...

MySQL运维实战(4.8) SQL_MODE之NO_ENGINE_SUBSTITUTION

开启NO_ENGINE_SUBSTITUTION,建表时如果指定的存储引擎不可用或不存在,SQL报错。否则会使用默认的存储引擎替换。如果不设置NO_ENGINE_SUBSTITUTION,建表时指定的...

Hbase&Hive区别对比

Hbase和Hive定义区别Hbase,其实是Hadoop database的简称,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。Hiv...

Kerberos安装

Kerberos安装

1、环境准备(1)安装好jdk(2)下载Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。解压下载后的z...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。