首页 > 数据库 >【最佳实践】MongoDB导入数据时重建索引

【最佳实践】MongoDB导入数据时重建索引

时间:2023-10-08 17:58:56浏览次数:42  
标签:10 mongod rw MongoDB js 索引 导入 processDataObjInit

MongoDB一个广为诟病的问题是,大量数据resotore时索引重建非常缓慢,实测5000万的集合如果有3个以上的索引需要恢复,几乎没法成功,而且resotore时如果选择创建索引也会存在索引不生效的问题,种种情况表明,MongoDB的一些默认设置存在明显不合理之处。
当然,深入理解后总会有办法解决这些问题,MongoDB发展到金,功能也是越来全面。

一、对于小数据量collection,可直接单命令行创建索引

类似如下操作:
db.getCollection('processDataObj').createIndex({ 'flowNo':1 }, {}, 'majority')

二、对于大数据量collection,需执行后台创建的方式

如下是最佳实践脚本:

echo "定义变量..."
COLLECT="processDataObjInit"
INDEX="'flowNo':1"
JSFILE=processDataObjInit_1.js

echo "生成js文件..."
echo "print('createIndex ...');
print(db.${COLLECT}.createIndex({${INDEX}}, {}, 'majority'));
print('End time is:');
print(db.hello());" > ${JSFILE}

echo "执行后台创建索引..."
JSFILE=processDataObjInit_1.js
KKLOG=${JSFILE}-`date +%Y-%m-%dT%H:%M`.log
mongosh mongodb://'admin':'passwd'@node1:20000,node2:20000,node3:20000/flowtest?authSource=admin --quiet ${JSFILE} > $KKLOG 2>&1 &

三、4600万collection重建索引计时情况

-rw-rw-r-- 1 mongod mongod         140 10月  8 15:32 processDataObjInit_1.js
-rw-rw-r-- 1 mongod mongod         707 10月  8 16:20 processDataObjInit_1.js-2023-10-08T15:32.log
-rw-rw-r-- 1 mongod mongod         184 10月  8 15:31 processDataObjInit_2.js
-rw-rw-r-- 1 mongod mongod         746 10月  8 16:20 processDataObjInit_2.js-2023-10-08T15:31.log
-rw-rw-r-- 1 mongod mongod         223 10月  8 15:28 processDataObjInit_3.js
-rw-rw-r-- 1 mongod mongod         782 10月  8 16:20 processDataObjInit_3.js-2023-10-08T15:28.log

可见基本需要50分钟左右即可并发完成3个索引的创建。

四、MongoDB默认只能同时并发创建3个索引

因此需修改配置到制定的大小,本次案例有6个大索引需要同时创建,修改shard配置文件,调整并发为6.

setParameter:
  maxNumActiveUserIndexBuilds: 6

实际启动shard时可以看到,配置已生效:

{"t":{"$date":"2023-10-08T07:01:54.495Z"},"s":"I",  "c":"CONTROL",  "id":5760901, "ctx":"main","msg":"Applied --setParameter options","attr":{"serverParameters":{"connPoolMaxConnsPerHost":{"default":200,"value":20000},"maxNumActiveUserIndexBuilds":{"default":3,"value":6}}}}

标签:10,mongod,rw,MongoDB,js,索引,导入,processDataObjInit
From: https://www.cnblogs.com/likingzi/p/17749755.html

相关文章

  • 闹着玩下网已屏蔽百度搜索引擎
    自从发表百度App的问题后,闹着玩下网似乎被K了,本来就想屏蔽百度,不过除了淘宝,一般很少有网站会去主动屏蔽搜索引擎,那差不多是断了流量来源,个人博客几乎不会这么做,为什么建议屏蔽呢?因为百度出个文心一言,这个所谓的文心一言大模型其实是通过读取搜索引擎内容训练学习,文心一言默认强制......
  • SQL索引
    目录MySQL索引及执行计划什么是索引?索引的排序方式BTtreeB+TreeB*Tree索引管理索引分类索引的增删查表数据准备主键索引primary唯一键索引unique普通索引前缀索引联合索引网站访问速度慢,如何排查,如何解决?使用explain分析SQL语句Type:全量扫描index:全索引扫描range:范围扫描ref:非唯一......
  • MySQL学习(4)好好使用B+树索引
    前言每个索引都是一颗B+树,对于聚簇索引,每一条完整记录都存储在B+树都叶子节点上;对于其他索引,叶子节点存储了索引列和主键。这么做都是为了提升查询速度,那么在实际使用中,是不是应该给所有列都添加索引呢,索引该如何使用呢?先见一张表,随机添加一些数据:CREATETABLEsingle_table(......
  • MySQL进阶篇:第二章_二.三_ 索引分类
    索引分类索引分类在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。分类含义特点关键字主键索引针对于表中主键创建的索引默认自动创建,只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以有多个UNIQ......
  • 倒排索引
    https://blog.csdn.net/qq_43403025/article/details/114779166单词ID(WordID)单词(Word)倒排列表(DocID)1乔布斯1,3,4,52苹果2,3,53iPad23,44宣布35了1,4,5......
  • 什么是站内搜索引擎?如何在网站中加入站内搜索功能?
    在当今数字时代,用户体验对于网站的成功起着至关重要的作用。提升用户体验和改善整体网站性能的一种方法是引入站内搜索引擎。站内搜索引擎是一种强大的工具,它的功能类似于Google或Bing等流行搜索引擎,但它专注于实施自己网站上的内容。用户可以在网站内搜索特定内容,无需手动浏览网站......
  • 索引
    索引索引的基本原理索引用来快速查找那么具有特定值的记录,如果没有索引,一般就要查询遍历整张表。索引的原理:将无序的数据变成有序的查询把创建了索引的列的内容进行排序对排序结果生成倒排表在倒排表内容上拼上数据地址链在查询的时候,先拿到倒排表内容,在取出数据地址链,从......
  • 数据泵(impdb)导入Oracle分片的数据库dump文件
    数据泵(impdb)导入Oracle数据库一.sqlplus登录目标数据库,创建导入的目录路径#该目录要在导入的数据库本机建立,如果是docker就在容器内部创建createdirectorydata_diras'/home/oracle/prd_imp/prd_dump';data_dir为路径名称,可自命名。路径是导出的dmp文件存放的路径必须......
  • 数据库表查看缺失的索引
    缺失索引就是帮你查找你的数据库缺少什么索引,告诉你那些字段需要加上索引,这样你就可以根据提示添加你数据库缺少的索引了 SELECTTOP10[TotalCost]=ROUND(avg_total_user_cost*avg_user_impact*(user_seeks+user_scans),0),avg_user_impact,TableName=st......
  • mysql索引失效
    1.索引失效1.1索引失效常见原因我们先来看一张图,总结了常见的索引失效的原因 1.2索引失效常见误区 1.3索引设计的几个建议 ......