Mongodb学习笔记(三)性能篇
一、索引管理
MongoDB提供了多样性的索引支持,索引信息被保存在system.indexes中MongoDB中_id字段在创建的时候,默认已经建立了索引,这个索引比较特殊,并且不可以删除,不过Capped Collections例外。
1、建立索引
建立索引函数:ensureIndex();
1(升序),-1(降序)
例:db.c1.ensureIndex({name:1});
当系统已有大量数据时,常见索引非常耗时,需要在后台执行,只需要指定“backgroud:true”即可。
例:db.c1.ensureIndex({age:1},{}backgroud:true);
建立唯一索引:{unique:true}
例:db.c1.ensureIndex({age:1},{unique:true});
2、查看索引清单:
getIndexKeys();
例:db.c1.getIndexKeys();
3、删除索引
dropIndex() //某个索引
dropIndexs() //删除所有索引
例:db.c1.dropIndexs(); //删除所有索引
db.ci.dropIndex({age:1}); //删除age索引
二、性能优化
1、explain执行计划
MongoDB提供了一个explain命令让我们活值系统如何处理查询请求。利用explain命令让我们可以很好的观察系统如何使用索引来加快检索,同时可以针对性优化索引。
2、优化器profile
MongoDB Database Profile是一种慢查询日志功能,可以作为我们优化数据的依据。
开启Profiling功能:有两种方式可以控制Profiling开关和级别
启动MongoDB时加上-profile=级别即可。
在客户端调用db.setProfilingLevel(级别)命令来实时配置
Profile信息保存在system.profile中。我们可以通过db.getProfilingLevel()命令来获取当前的Profile的级别。
具体操作:
db.setProflingLevel(2); //第二个参数为毫秒,默认为100ms
db.getProfilingLevel();
级别值:
0---不开启
1---记录慢命令(默认为>100ms)
2---记录所有命令
三、优化方案
1、创建索引
在查询条件的字段上,或者排序条件的字段上创建索引,可以显著提高执行效率
db.c1.ensureIndex({age:1});
2、限定返回结果条数
使用limit()限定返回结果集的大小,可以减少database server的资源消耗,可以减少网络传输数据量。
db.c1.find().sort({age:-1}).limit(10);
3、查询使用到的字段,不查询所有字段。
db.c1.find({},{name:"user",age:25}).sort(age:-1).limit(10);
4、采用cappendcollection
cappend Collections比普通的Collections的读写效率高
5、采用Profiling
Profiling功能肯定是会影响效率的,但是bu tai yan不太严重,原因是它使用的是system.profile来记录,system.profile是一个capped collection这种collection在操作上有一些限制和特点,但是效率更高。
四、性能监控
通过对数据库的性能监控,能够更好的了解数据库的工作张台,从而进行优化。
工具:
Mongodniff //主要抓去通讯记录
此工具可以从底层监控到底有哪些命令发送给MongoDB去执行
./mongosniff --source NET lo
它是实时动态监视的,需要打开另一个客户端进行命令操作,可以将这些数据输出到一个日志文件中,那么就可以保留喜爱所有数据库操作的历史记录,对于后期的性能分析和安全审计等工作将是一个巨大的贡献。
Mongostat
./mongostat
实时监控
Mongodb学习笔记(三)性能篇的更多相关文章
- Mongodb学习笔记三(Mongodb索引操作及性能测试)
第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...
- MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- MongoDB学习笔记三 - MongooseAPI操作数据
在上一篇我们讲了如何通过Mongoose想数据库动态添加数据, 接下来我们一起来看一下如何通过Mongoose来对数据库进行增删改查等一系列操作 Model 对象的方法 remove(cinditio ...
- MongoDB学习笔记三—增删改文档上
插入insert 单条插入 > db.foo.insert({"bar":"baz"}) WriteResult({ }) 批量插入 > db.fo ...
- MongoDB学习笔记三:查询
MongoDB中使用find来进行查询.查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合.find的第一个参数决定了要返回哪些文档,其形式也是一个文档,说明要执行的查询细节.空的查询 ...
- Mongodb 学习笔记(三) .net core SDK
首先添加 Nuget包 MongoDB.Driver 创建一个Model. public class Student { public ObjectId _id { get; set; } publ ...
- MongoDB学习笔记(转)
MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...
- MongoDB学习笔记(四)--索引 && 性能优化
索引 基础索引 ...
- MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁
权限 绑定内网I ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
随机推荐
- base(根URL)
指定用于一个文档中包含的所有相对 URL 的根 URL.一份中只能有一个 <base> 元素. 可以通过使用 document.baseURI 的 JS 脚本查询 属性 包含全局属性 hr ...
- XJOI CSP-S2 2019开放模拟训练题1 赛后总结
比赛链接 友好数对 暴力枚举\([L,R]\)之间的所有数,将每个数进行"旋转",看是否符合题意. 注意"旋转"的次数,并不一定是数字位数.只要旋转回到了初始数 ...
- VS 2017——解决运行C++程序后出现(进程xxxx)已退出,返回代码为:0的问题
工具-选项-调试-常规,“调试停止时自动关闭控制台”选项打钩.
- Wannafly Camp 2020 Day 6F 图与三角形 - 图论
把黑边视为无边,那么答案之和每个点的度数有关 #include <bits/stdc++.h> using namespace std; #define int long long int ...
- clone()与clone(true)的用法
clone() 方法生成被选元素的副本,包含子节点.文本和属性. 使用 clone(true) 方法在clone()的基础上还包括克隆元素的事件处理器.
- C语言-基本数据类型
一.C语言数据类型深度剖析 1.什么是数据类型? -可以理解为固定内存大小的别名 -数据类型是创建变量的模子 -数据类型是对内存的格式化操作 上面三句话如何理解? 在以前的汇编语言时代,我们要存储一些 ...
- Spring框架详解介绍-基本使用方法
1.Spring框架-控制反转(IOC) 2.Spring框架-面向切面编程(AOP) 3.Spring 内置的JdbcTemplate(Spring-JDBC) Spring框架-控制反转(IOC) ...
- QT版本
最近在linux下安装qt:发现主要的问题是qt的版本问题:下面来谈谈各个版本的理解 Qt 的版本是按照不同的图形系统来划分的,目前分为五个版本: Win: 适用于Miccrosoft Windows ...
- php server整理
$_SESSION['PHP_SELF'] -- 获取当前正在执行脚本的文件名. $_SERVER['SERVER_PROTOCOL'] -- 请求页面时通信协议的名称和版本.例如,“HTTP/1.0 ...
- CallContext类
CallContext类 转载weixin_30723433 最后发布于2019-07-20 10:42:24 阅读数 133 收藏 展开 System.Runtime.Remoting.Messa ...