前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MONGODB 加索引 大内存 与连锁思维

MONGODB 加索引 大内存 与连锁思维

作者头像
AustinDatabases
发布2020-08-26 21:56:14
2.5K0
发布2020-08-26 21:56:14
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

创建MONGODB 的索引,属于基本操作,但如果是一个有2T 的 collection 要加一个索引,也属于基本操作,实际上量变产生质变,很多问题的考虑都不在那么简单。

这时可能有有一个声音,有你说的那么麻烦吗? 我使用 background:true

不就可以了。并且这样的处理的方式在后台处理,不会对现有的系统产生锁和任务无法处理的问题,缺点就是稍微比前台操作耗时一点。

在创建索引的时候,可以通过下面的语句来查看相关的进度

db.currentOp(true).inprog.forEach(function(op){ if(op.msg!==undefined) print(op.msg) })

在MONGODB 4.2 系统上,在构建过程的开始和结束阶段,索引构建仅对被索引的集合获取独占锁,以保护元数据的更改。构建过程的其余部分使用后台索引构建的生成行为,以便在构建期间最大化对集合的读写访问。4.2尽管有更宽松的锁定行为,但索引构建仍然可以生成高效的索引数据结构。mongodb4.2 系统应该是已经抛弃了 background的参数来创建搜索,根据一代比一代强的想法,自然是 background 有一些需要改进的地方,新的版本才会进行变动。

在MONGODB 3.4 的时候有一个参数

setParameter:
    maxIndexBuildMemoryUsageMegabytes: 1024
这个参数就直接为后台添加索引加速的,如果有足够的内存,(内存的与wiretiger 无关),则会加速background 添加索引的速度。
作为复制集,添加索引的的方式也是以命令的方式推送到从节点,但如果是巨大的collection则很多的建议是,需要以特殊的方式来进行索引的添加,这点类似有些 MYSQL 大表添加索引或字段的一个过程。
1  将节点从集群中分离2  在分离的节点添加索引3  将节点在此加入到集群中4  将添加索引的从节点替换主节点5  周而复始,直到索引的集群的节点都添加了索引
当然你要注意你的时间窗口,集群离开的时间不要超过oplog的时间窗口,否则
你就好看了。
所以大collection添加索引,就是一个量变到质变的过程,你需要考虑的问题1 你内存的大小,是否能hold 你添加的索引2 业务上访问度是否是高强度的,如果是,那你及需要考虑上面提到的方法3 oplog 的设计大小其实和你以后一些基础操作有关4 尽量抛弃旧版本,升级到 3.6 及以上的版本,这样可以快速调整oplog的大小
所以一件看上去不值得一提的加索引的事情,其实如果量大到一定程度,则考虑和需要分析的问题和 量级比较小的时候是不能同日而语的。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档