MongoDB 实验——数据库优化

第1关:MongoDB 查询优化原则

任务描述

本关任务:了解查询优化原则,完成本关选择题。

相关知识
查询优化原则
  • 在查询条件、排序条件、统计条件的字段上选择创建索引,可以显著提高查询效率;

  • 用 $or 时把匹配最多结果的条件放在最前面,用 $and 时把匹配最少结果的条件放在最前面;

  • 使用 limit() 限定返回结果集的大小,减少数据库服务器的资源消耗,以及网络传输的数据量;

  • 尽量少用 $in,而是分解成一个一个的单一查询。尤其是在分片上,$in 会让你的查询去每一个分片上查一次,如果实在要用的话,先在每个分片上建索引;

  • 尽量不用模糊匹配查询,用其它精确匹配查询代替,比如 $i 、$nin;

  • 查询量大、并发大的情况,通过前端加缓存解决;

  • 能不用安全模式的操作就不用安全模式,这样客户端没必要等待数据库返回查询结果以及处理异常,快了一个数量级;

  • MongoDB 的智能查询优化,判断粒度为 query 条件,而 skip 和 limit 都不在其判断之中,当分页查询最后几页时,先用 order 反向排序;

  • 尽量减少跨分片查询,balance 均衡次数少;

  • 只查询要使用的字段,而不查询所有字段;

  • 更新字段的值时,使用 $inc 比 update 效率高;

  • apped collections 比普通 collections 的读写效率高;

  • server-side processing 类似于 SQL 查询的存储过程,可以减少网络通讯的开销;

  • 必要时使用 hint() 强制使用某个索引查询;

  • 如果有自己的主键列,则使用自己的主键列作为 id,这样可以节约空间,也不需要创建额外的索引;

  • 使用 explain ,根据 exlpain plan 进行优化;

  • 范围查询的时候尽量用 $in、$nin 代替;

  • 查看数据库查询日志,具体分析的效率低的操作;

  • mongodb 有一个数据库优化工具 database profiler,能够检测数据库操作的性能。可以发现 query 或者 write 操作中执行效率低的,从而针对这些操作进行优化;

  • 尽量把更多的操作放在客户端,当然这就是 mongodb 设计的理念之一。

 答案

1.CD、2.AD、3.AC、4.ABD、5.BCD、6.ABCD、7.CD、8.AD

第2关:MongoDB 的 Profiling 工具(一)

任务描述

本关任务:完成慢查询设置。

编程要求

根据提示,在右命令行进行操作,在 mydb 数据库中开启 Profiling,设置级别为1,时间为50ms。

代码
mongo
use mydb
db.setProfilingLevel(1,50)

第3关:MongoDB 的 Profiling 工具(二)

任务描述

本关任务:完成慢查询设置并自行分析慢查询结果。

编程要求

在右侧命令行中,进行以下操作:

  • 使用 MongoDB 的 mydb3 数据库;

  • 开启并设置其慢查询日志功能,设置为模式1,时间限制为 5ms;

  • 循环插入10万条数据到集合 items1 中,格式如下:

  1. {_id:i,text:"Hello MongoDB"+i}

(插入方法不记得的同学,可参考 游标 这一节内容)

  • 循环插入10万条数据到集合 items2 中,格式如下:
  1. {_id:i,text:"Hello MongoDB"+i}

以上操作计入测评,请同学们进行完以上操作后对以下几条命令进行练习(不计入测评):

  • 查看最新的 Profile 记录;

  • 显示最近的慢查询事件;

  • 特定时间(你自己操作时间段内),按照消耗时间排序的慢查询;

  • 返回大于7毫秒慢的操作;

  • 返回 items1 集合的慢查询。

代码
mongo
use mydb3
db.setProfilingLevel(1,5)
for(var i=0;i<100000;i++)db.items1.insert({_id:i,text:"Hello MongoDB"+i})
for(var i=0;i<100000;i++)db.items2.insert({_id:i,text:"Hello MongoDB"+i})

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值