查询部分:
1. mongo客户端的请求
2. mongod配置服务器端对数据库的加载
3. mongod query中cursor操作
4. mongodb的document匹配
mongod query中cursor操作
几个关于mongodb的游标概念:
basicCursor: 直接扫描整个collection的游标,可设置初始的扫描位置,扫描为顺序扫描.
ReverseCursor: 反向扫描游标,相对于顺序扫描,这里是反向扫描.
GeoCursorBase: 空间地理索引游标的基类.
BtreeCursor: mongodb的一般数据索引扫描游标,这个游标完成对于索引的扫描.
QueryOptimizerCursor: 经过优化的扫描游标。
多plan扫描时用于优化查询的游标. 这里将简单描述其流程:
-
如果是类似这种db.coll.find()的查询则将直接返回一个BasicCursor的游标扫描全表.
-
如果是简单的id查询如db.coll.find(_id:xxx),在查询计划允许直接查询_id索引的情况下,返回一个_id索引的BtreeCursor.
查询计划:对于每个查询,查询计划程序在查询计划缓存中搜索适合 query shape 的查询计划。如果没有匹配到合适的查询计划,则查询计划程序会生成候选计划,以便在试用期内进行评估。查询计划程序选择获胜计划,创建包含获胜计划的缓存条目,并使用它来生成结果文档。
-
根据查询整理出查询值的范围,作为优化查询范围的依据,如:db.coll.find({x:{ l t : 100 , lt:100, lt:100,gt:20}}),那么这里其范围就是[20.100],这个范围只有在对应的变量是索引的情况下起作用,如x为其中的一个索引,那么这里的范围将帮助其游标BtreeCursor首先直接将查询范围定位到[20,100]的位置&#