一、索引管理

    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学习笔记(三)性能篇的更多相关文章

  1. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  2. MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  3. MongoDB学习笔记三 - MongooseAPI操作数据

    在上一篇我们讲了如何通过Mongoose想数据库动态添加数据, 接下来我们一起来看一下如何通过Mongoose来对数据库进行增删改查等一系列操作 Model 对象的方法 remove(cinditio ...

  4. MongoDB学习笔记三—增删改文档上

    插入insert 单条插入 > db.foo.insert({"bar":"baz"}) WriteResult({ }) 批量插入 > db.fo ...

  5. MongoDB学习笔记三:查询

    MongoDB中使用find来进行查询.查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合.find的第一个参数决定了要返回哪些文档,其形式也是一个文档,说明要执行的查询细节.空的查询 ...

  6. Mongodb 学习笔记(三) .net core SDK

    首先添加 Nuget包  MongoDB.Driver 创建一个Model. public class Student { public ObjectId _id { get; set; } publ ...

  7. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

  8. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

  9. MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁

    权限                                                                                             绑定内网I ...

  10. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

随机推荐

  1. docker的个人理解

    一.什么是docker? docker就是集装箱的原理.可以实现远超于虚拟机的轻量级虚拟化.它是内核级的虚拟化.期望达到使项目运行环境一次封装,到处运行的目的. 集装箱解决了什么问题?在一艘大船上,可 ...

  2. 微信小程序配置合法域名和业务域名

    在微信小程序的开发过程中,当需要请求第三方网站数据时,都是直接调用wx.request接口的: xxxx:function(){ wx.request({ url: 'xxxxxxxxxx', dat ...

  3. java_HashMap的遍历方法_4种

    1.通过接收keySet来遍历: HashMap<String,String> map = new HashMap<>(); map.put("bb",&q ...

  4. MVC理解(全程白话不拽词)

    我所发的所有博客只为了给想干程序员,但是基础没有或者很差,刚入职场的人 所有的观点不一定准确,我不懂的或者不理解的都会备注出来 先说MVC MVC理解为:M  =  Model  =  数据库表里面每 ...

  5. a标签绑定事件

    <a href="javascript:void(0);" onclick="js_method()"></a> 这种方法是很多网站最常 ...

  6. 自定义Ribbon客户端策略

    说明   为了实现Ribbon细粒度的划分,让调用不同的微服务时采用不同的客户端负载均衡策略, 通常情况下我们会自定义配置策略.   本文以内容中心(content-center)调用户中心微服务(u ...

  7. PyQt5-QDateEdit的简单使用

    使用PyQt5开发图形界面,里面使用日期框,这里把这个QDateEdit组件命名为:beginDate from PyQt5.QtCore import QDate 1.初始化赋值,不设置则默认为20 ...

  8. 纯css实现移动端横向滑动列表(可应用于ionic3移动app开发)

    前几天在公司做开发的时候碰到一个列表横向滑动的功能,当时用了iscroll做,结果导致手指触到列表的范围内竖向滑动屏幕滑动不了的问题. 这个问题不知道iscroll本身能不能解决,当时选择了换一种方式 ...

  9. cat 显示文本、less 分屏显示文本、more 分页显示文件、head 显示文件的前面的内容、cut 切割、paste合并、wc用来对文本进行统计、sort排序、权限、关闭文件、vim的使用

    cat 显示文本  -E 显示结尾的$符 -n 对显示的每一行进行编号 -b 对非空行进行编号 -s 对连续的空行进行压缩 tac 倒序显示 less 分屏显示文本 向下翻一屏 空格 向下翻一行 回车 ...

  10. Python记:静夜偶记