Mongodb -02 进阶操作
1.索引的使用
1 # 单值索引 3 db.col1.ensureIndex({id:1}) 4 5 # 复合索引 7 db.user.ensureIndex({name:1,age:1}) 8 9 # 唯一索引 11 db.user.ensureIndex({name:1,age:1},{unique:true}) 12 13 # 创建唯一索引并删除重复的文档 15 db.user.ensureIndex({name:1,age:1},{unique:true,dropDups:true}) 16 17 # 删除索引 19 db.user.dropIndex({name:1}) 21 db.user.dropIndex() //删除所有的索引 22 23 # 查看集合上的索引 25 db.col1.getIndexes() 27 [{ 29 "v" : 2, 30 "key" : { 31 "_id" : 1 32 }, 33 "name" : "_id_", 34 "ns" : "louis.col1" 35 }, 36 { 37 "v" : 2, 38 "key" : { 39 "id" : 1 40 }, 41 "name" : "id_1", 42 "ns" : "louis.col1" 43 }] 45 46 # 重构索引 48 如果已经在集合上进行了多次的插入和删除操作,需要重构索引,以便更好的使用索引查询。 50 重构索引时会先删除所有的索引,包括_id 上的默认索引。然后重新创建索引。 52 db.col1.reIndex()
索引是如何工作的
在首次执行查询时,Mongo 会为每一个可用于该查询的索引创建多个执行计划。系统会记住执行最快的执行计划使用的索引。
对于后续的查询,将会使用找个被记住的索引,直到发生以下情况时会再次对执行计划进行评估。
- 集合收到1000个写操作
- 添加或者删除了一个索引
- mongo程序重启了
- 发生了索引的重构
Map/Reduce 框架
Map:这个步骤中,该节点会充当接收输入参数的主节点并将大问题划分成多个小的子问题。这些子问题会被跨工作节点进行分发。
工作节点可能将问题进一步划分成子问题。这就产生了多层树结构。然后工作节点将会处理子问题并将答案返回给主节点。
Reduce:所有的子问题的答案都返回给了主节点,主节点合并所有的这些答案并生成最终的输出结果。
浙公网安备 33010602011771号