- MongoDB官方文档中文版
- MongoDB中文手册说明
- MongoDB简介
- 安装 MongoDB
- The mongo Shell
- MongoDB CRUD 操作
- 聚合
- 数据模型
- 事务
- 索引
- 安全
- 安全检查列表
- 启用访问控制
- 身份验证
- 基于角色的访问控制
- TLS / SSL(传输加密)
- 静态加密
- 客户端字段级加密
- 审计
- 网络和配置强化
- 实现字段级别修订
- 安全参考
- 附录
- 变更流
- 复制
- 分片
- 分片键
- 哈希分片
- 范围分片
- 区
- 管理分片区
- 按位置细分数据
- 用于更改SLA或SLO的分层硬件
- 按应用或客户细分数据
- 仅插入工作负载的分布式本地写入
- 管理分片区
- 使用块进行数据分区
- 在分片集群中拆分数据块
- 管理
- 存储
- 存储引擎
- 日志记录
- 管理日志记录
- GridFS
- FAQ:MongoDB 存储
- 存储引擎
- 参考
- 运算符
- 查询与映射运算符
- 更新运算符
- 聚合管道阶段
- 聚合管道操作符
- $abs (aggregation)
- $acos (aggregation)
- $acosh (aggregation)
- $add (aggregation)
- $addToSet (aggregation)
- $allElementsTrue (aggregation)
- $and (aggregation)
- $anyElementTrue (aggregation)
- $arrayElemAt (aggregation)
- $arrayToObject (aggregation)
- $asin (aggregation)
- $asinh (aggregation)
- $atan (aggregation)
- $atan2 (aggregation)
- $atanh (aggregation)
- $avg (aggregation)
- $ceil (aggregation)
- $cmp (aggregation)
- $concat (aggregation)
- $concatArrays (aggregation)
- $cond (aggregation)
- $convert (aggregation)
- $cos (aggregation)
- $dateFromParts (aggregation)
- $dateToParts (aggregation)
- $dateFromString (aggregation)
- $literal (aggregation)
- 查询修饰符
- 数据库命令
- 聚合命令
- 地理空间命令
- 查询和写操作命令
- 查询计划缓存命令
- 认证命令
- 用户管理命令
- 角色管理命令
- 复制命令
- 分片命令
- 会话命令
- 管理命令
- 诊断命令
- 免费监控命令
- 系统事件审计命令
- mongo Shell 方法
- 集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
- 词汇表
- 默认的MongoDB端口
- 默认的MongoDB读/写关注
- 服务器会话
- MongoDB驱动
- FAQ
- 联系我们
- 更多资料
- [快学Mongo]
- [Mongo问题讨论区]
- [Mongo 驱动使用手册]
- 本书使用 GitBook 发布
在副本集上建立滚动索引
在复制集上建立索引
在本页面
索引构建会影响复制集的性能。默认情况下,MongoDB 4.4及以后版本在所有承载数据的复制集成员上同时构建索引。对于不能容忍由于索引构建而导致性能下降的工作负载,可以考虑使用以下过程以滚动方式构建索引。
滚动索引构建一次最多抽取一个复制集成员(从辅助成员开始),并在该成员上作为独立的索引构建。构建滚动索引至少需要一次复制集的选择。
注意事项
唯一索引
要使用以下过程创建唯一索引,必须在此过程中停止对集合的所有写操作。
如果在此过程中不能停止对集合的所有写操作,请不要使用此页面上的过程。相反,通过在主节点上为一个副本集发出' db.collection.createIndex() '来在该集合上构建你的唯一索引。
Oplog大小
确保您的oplog足够大,以允许索引或重新索引操作完成,而不会落后太多而无法跟上。参见oplog sizing文档了解更多信息。
前提条件
- 用于构建唯一索引
要使用以下过程创建唯一索引,必须在索引构建期间停止对集合的所有写操作。否则,复制集成员之间的数据可能会不一致。如果不能停止对集合的所有写操作,请不要使用以下过程创建唯一索引。
程序
重要
以下以滚动方式构建索引的过程适用于复制集部署,而不适用分片集群。有关分片集群的过程,请参阅在分片集群上构建滚动索引。
A. 停止一个辅助节点并作为独立节点重新启动
停止与辅助节点关联的mongod进程。进行以下配置更新后重新启动:
- 配置文件
如果您正在使用配置文件,请进行以下配置更新:
- 注释掉replication.replSetName选项。
- 更改net.port到一个不同的端口。[1]记录原始的端口设置作为注释。
- 在setParameter部分设置参数' disablelogicalicalsessioncacherefresh '为' true '。
例如,更新后的副本集成员配置文件将包括如下示例所示的内容:
net:
bindIp: localhost,<hostname(s)|ip address(es)>
port: 27217
# port: 27017
#replication:
# replSetName: myRepl
setParameter:
disableLogicalSessionCacheRefresh: true
其他设置(例如storage.dbPath
等)保持不变。
并重新启动:
mongod --config <path/To/ConfigFile>
- 命令行选项
如果使用命令行选项,请进行以下配置更新:
- 删除—-复制集。
- 修改—-端口到另一个端口。
- 在—-setParameter选项中设置参数disableLogicalSessionCacheRefresh为true
例如,如果你的复制集成员通常运行在默认端口27017和——replSet选项,你应该指定一个不同的端口,省略——replSet选项,并设置disableLogicalSessionCacheRefresh参数为true:
mongod --port 27217 --setParameter disableLogicalSessionCacheRefresh=true
其他设置(例如--dbpath
等)保持不变。
B. 建立索引
直接连接到mongod实例作为一个独立的运行在新的端口上,并为这个实例创建新的索引。
例如,将mongo
连接到实例,然后使用createIndex()
来username
在records
集合的字段上创建升序索引:
db.records.createIndex( { username: 1 } )
C. 重新启动程序mongod作为复制集成员
索引构建完成后,关闭mongod
实例。撤消以独立版本启动时所做的配置更改,以返回其原始配置并以复制集的成员身份重新启动。
重要
一定要删除' disableLogicalSessionCacheRefresh '参数。
例如,重新启动复制集成员:
- 配置文件
如果您正在使用配置文件:
- 恢复到原始端口号。
- 取消replication.replSetName的注释。
- 删除setParameter中的参数' disableLogicalSessionCacheRefresh '。
例如:
copycopied
net:
bindIp: localhost,<hostname(s)|ip address(es)>
port: 27017
replication:
replSetName: myRepl
Other settings (e.g. storage.dbPath
, etc.) remain the same.
并重新启动
mongod --config <path/To/ConfigFile>
- 命令行选项
如果您正在使用配置文件:
- 恢复到原始端口号
- 包括——replSet选项。
- 删除参数disableLogicalSessionCacheRefresh。
例如:
mongod --port 27017 --replSet myRepl
其他设置(例如--dbpath
等)保持不变。
D.重复其余的步骤
一旦该成员赶上集合中的其他成员,请对其余的次要成员一次重复一个成员的过程:
E. 在主服务器上构建索引
当所有的辅助服务器都有了新的索引时,从主服务器下走一步,使用上面描述的过程作为一个独立的程序重新启动它,并在前主服务器上构建索引:
- 使用
mongo shell
中的rs.stepDown()
方法mongo
降低主数据库的性能。成功降级后,当前的主节点将成为辅助节点,复制集成员将选择新的主节点。 - A.停止一个辅助节点并以独立方式重新启动
- B.建立索引
- C.重新启动程序mongod作为副本集成员
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05