一、索引管理

    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

          实时监控

最新文章

  1. [Java] JSP笔记 - Listener 监听器
  2. PHP大数(浮点数)取余
  3. python之路八
  4. 之前总结的今天给大分享一下iOS
  5. 项目:DoubleFaceCamera
  6. 了解less跟sass
  7. HOWTO:制作 Windows 7 加速部署映像(作者:苏繁)
  8. Universal Serial Bus USB 3.0
  9. Q_INVOKABLE与invokeMethod用法全解
  10. QT进度条QProgressBar的练习(定制QProgressBar,单独成为一个控件)
  11. DataGridView显示时间格式
  12. 论SOA架构的几种主要开发方式【转】
  13. android设置组件所占的比例
  14. 如何向投资人展示——How to Present to Investors
  15. Chrome 扩展 最近的历史 HistoryBar v1.1
  16. CRM客户关系管理系统(五)
  17. Spring入门介绍-AOP(三)
  18. Python和Java分别实现冒泡排序
  19. Flask系列08--Flask中flask_session, redis插件
  20. 《Unix&Linux大学教程》学习笔记二:指令常识

热门文章

  1. POJ2528Mayor's posters 线段树,离散化技巧
  2. 微信小程序配置合法域名和业务域名
  3. 牛客CSP-S提高组赛前集训营4 赛后总结
  4. 斜率优化 DP
  5. Eclipse设置代码模板
  6. 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)
  7. 【Unity|C#】基础篇(10)——泛型(Generic)/ 泛型约束条件(where)
  8. easyui只显示年月,时间格式
  9. C++ 实例练习-替换原生数组
  10. 解决问题:SVN重命名后,不允许提交