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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 【最佳实践】MongoDB导入数据时重建索引

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 &
AI 代码解读

三、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
AI 代码解读

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

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

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

setParameter:
  maxNumActiveUserIndexBuilds: 6
AI 代码解读

实际启动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}}}}
AI 代码解读
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
打赏
0
0
0
0
41
分享
相关文章
微服务——MongoDB常用命令——MongoDB索引知识概述
本文介绍MongoDB索引相关知识,包括其在查询中的重要作用。索引可避免全集合扫描,显著提升查询效率,尤其在处理海量数据时。通过B树数据结构存储字段值并排序,支持相等匹配、范围查询及排序操作。文中还提供了官方文档链接以供深入学习。
23 0
微服务——MongoDB常用命令——MongoDB索引的类型
本节介绍了MongoDB中索引的几种类型及其特点。包括单字段索引,支持升序/降序排序,索引顺序对操作无影响;复合索引,字段顺序重要,可实现多级排序;地理空间索引,支持平面与球面几何查询;文本索引,用于字符串搜索并存储词根;哈希索引,基于字段值散列,适合等值匹配但不支持范围查询。
18 1
微服务——MongoDB常用命令——MongoDB索引的类型
MongoDB索引知识
MongoDB索引是提升查询性能的关键工具,通过构建特殊的数据结构(如B树)优化数据访问路径。无索引时,查询需全集合扫描,时间复杂度为O(n);使用索引后可降至O(log n),实现毫秒级响应。MongoDB支持多种索引类型:单字段索引适用于高频单字段查询;复合索引基于最左前缀原则优化多条件过滤和排序;专业索引包括地理空间索引(支持LBS服务)、文本索引(全文搜索)和哈希索引(分片键优化)。合理选择和优化索引类型,可显著提升数据库性能。建议使用explain()分析查询计划,并定期清理冗余索引。
43 14
掌握MongoDB索引优化策略:提升查询效率的关键
在数据库性能调优中,索引是提升查询效率的利器。本文将带你深入了解MongoDB索引的内部工作原理,探讨索引对查询性能的影响,并通过实际案例指导如何针对不同的查询模式建立有效的索引。不仅将涵盖单一字段索引,还会探讨复合索引的使用,以及如何通过分析查询模式和执行计划来优化索引,最终实现查询性能的最大化。
MongoDB数据库的索引管理技巧
【8月更文挑战第20天】MongoDB数据库的索引管理技巧
122 1
|
8月前
|
MongoDB 强制使用索引 hint
MongoDB 强制使用索引 hint
234 3
MongoDB索引知识
MongoDB索引知识
47 1
MongoDB索引知识
MongoDB 索引限制
10月更文挑战第22天
87 2
MongoDB 高级索引
10月更文挑战第22天
52 2
MongoDB 覆盖索引查询
10月更文挑战第21天
67 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等