mongodb(三)

索引详讲
索引管理
空间索引

for(var i = 0 ; i<200000 ;i++){
    db.books.insert({number:i,name:i+"book"})
}

1.创建简单索引

数据准备index.js
1.1.先检验一下查询性能
var start = new Date()
db.books.find({number:65871})
var end = new Date()
end - start
1.2.为number 创建索引
db.books.ensureIndex({number:1})
1.3.再执行第一部的代码可以看出有数量级的性能提升

2.索引使用需要注意的地方
2.1.创建索引的时候注意1是正序创建索引-1是倒序创建索引
2.2.索引的创建在提高查询性能的同事会影响插入的性能
对于经常查询少插入的文档可以考虑用索引
2.3.符合索引要注意索引的先后顺序
2.4.每个键全建立索引不一定就能提高性能呢
索引不是万能的
2.5.在做排序工作的时候如果是超大数据量也可以考虑加上索引
用来提高排序的性能

3.索引的名称
3.1用VUE查看索引名称


3.2创建索引同时指定索引的名字
db.books.ensureIndex({name:-1},{name:”bookname”})

4.唯一索引
4.1如何解决文档books不能插入重复的数值
建立唯一索引
db.books.ensureIndex({name:-1},{unique:true})
试验
db.books .insert({name:”1book”})


5.踢出重复值
5.1如果建议唯一索引之前已经有重复数值如何处理
db.books.ensureIndex({name:-1},{unique:true,dropDups:true})
6.Hint
6.1如何强制查询使用指定的索引呢?
db.books.find({name:"1book",number:1}).hint({name:-1})
指定索引必须是已经创建了的索引

7.Expain
7.1如何详细查看本次查询使用那个索引和查询数据的状态信息
db.books.find({name:"1book"}).explain()


“cursor” : “BtreeCursor name_-1“ 使用索引
“nscanned” : 1 查到几个文档
“millis” : 0 查询时间0是很不错的性能

1.system.indexes
1.1在shell查看数据库已经建立的索引
db.system.indexes.find()
db.system.namespaces.find()
2.后台执行
2.1执行创建索引的过程会暂时锁表问题如何解决?
为了不影响查询我们可以叫索引的创建过程在后台
db.books.ensureIndex({name:-1},{background:true})
3.删除索引
3.1批量和精确删除索引
db.runCommand({dropIndexes : ”books” , index:”name_-1”})
db.runCommand({dropIndexes : ”books” , index:”*”})

1.mongoDB提供强大的空间索引可以查询出一定范围的地理坐标.看例子
准备数据map.json

var map = [{
  "gis" : {
    "x" : 185,
    "y" : 150
  }
},{
  "gis" : {
    "x" : 70,
    "y" : 180
  }
},{
  "gis" : {
    "x" : 75,
    "y" : 180
  }
},{
  "gis" : {
    "x" : 185,
    "y" : 185
  }
},{
  "gis" : {
    "x" : 65,
    "y" : 185
  }
},{
  "gis" : {
    "x" : 50,
    "y" : 50
  }
},{
  "gis" : {
    "x" : 50,
    "y" : 50
  }
},{
  "gis" : {
    "x" : 60,
    "y" : 55
  }
},{
  "gis" : {
    "x" : 65,
    "y" : 80
  }
},{
  "gis" : {
    "x" : 55,
    "y" : 80
  }
},{
  "gis" : {
    "x" : 0,
    "y" : 0
  }
},{
  "gis" : {
    "x" : 0,
    "y" : 200
  }
},{
  "gis" : {
    "x" : 200,
    "y" : 0
  }
},{
  "gis" : {
    "x" : 200,
    "y" : 200
  }
}]
for(var i = 0;i<map.length;i++){
    db.map.insert(map[i])
}

1.查询出距离点(70,180)最近的3个点
添加2D索引
db.map.ensureIndex({"gis":"2d"},{min:-1,max:201})
默认会建立一个[-180,180]之间的2D索引
查询点(70,180)最近的3个点
db.map.find({"gis":{$near:[70,180]}},{gis:1,_id:0}).limit(3)
2.查询以点(50,50)和点(190,190)为对角线的正方形中的所有的点
db.map.find({gis:{"$within":{$box:[[50,50],[190,190]]}}},{_id:0,gis:1})
3.查询出以圆心为(56,80)半径为50规则下的圆心面积中的点
db.map.find({gis:{$within:{$center:[[56,80],50]}}},{_id:0,gis:1})

时间: 2024-10-01 05:13:50

mongodb(三)的相关文章

MongoDB(三)——增删改查

MongoDB作为非关系型数据库,还是传统数据库的增删改查有很大的区别的,这里只是将知识点进行了一下提纲挈领,实际用的时候,我们百度一下详细用法即可.先看大的几个方面: 一,对于里边的插入和删除不再过多赘述,相对来说知识点比较少.先来看一下更新,常用操作还是非常有用的,需要我们根据实际情况灵活运用,这里只是提出了知识点,需要百度出例子来学习使用: 2,查询也是一样,看一下知识点的汇总,其实用几个,还是有规律的,比较容易记录的: 3,看一下固定集合Capped Collection:顾名思义是有着

mongodb三种存储引擎高并发更新性能专题测试

背景说明 近期北京理财频道反馈用来存放股市实时数据的MongoDB数据库写响应请求很慢,难以跟上业务写入速度水平.我们分析了线上现场的情况,发现去年升级到SSD磁盘后,数据持久化的磁盘IO开销已经不是瓶颈.通过日志分析,线上单次写入(更新)请求大多在数十毫秒这个级别,数据库端观察几个主要的db在繁忙时通常有95%以上的时间在进行锁等待.线上数据库并发很高,接近1000个连接,所以怀疑是并发争用表锁导致性能不足. 我们知道MongoDB的mmap存储引擎一直是库/表级锁,因此任何写操作并发越高锁争

MongoDB(三)——CRUD

MongoDB作为非关系型数据库.还是传统数据库的增删改查有很大的差别的.这里仅仅是将知识点进行了一下提纲挈领,实际用的时候.我们百度一下具体使用方法就可以. 先看大的几个方面: 一.对于里边的插入和删除不再过多赘述.相对来说知识点比較少. 先来看一下更新,经常使用操作还是很实用的,须要我们依据实际情况灵活运用,这里仅仅是提出了知识点,须要百度出样例来学习使用: 2,查询也是一样,看一下知识点的汇总.事实上用几个.还是有规律的.比較easy记录的: 3,看一下固定集合Capped Collect

Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

一.简介 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我们介绍了对MongoDB的新增和删除, 今天我们要介绍Java代码实现对MongoDB实现查询操作. 我们回顾一下,我们在之前介绍了MongoDB的基本文档查询,MongoDB的查询语法: db.orders.find({{<field1>:<value1>,<field2>

Mongodb(三):Mongodb的增删改查(1)

学Mongodb之前,最好先了解一下JSON这种数据格式,Mongodb中的BSON是JSON的一种扩展,和JSON差不多,如果懂JSON的话,学起来会容易很 多,当然JSON也是很容易上手的. (1):插入(insert)可以有两种,单个的插入document和批量的插入document a. 插入一条document:  示例:db.persons.insert({"_id":"001", "name":"zhangsan"

mongoDB(三) mongoDB分片集群

mongoDB分片集群 介绍 解决数据分片,防止数据丢失生产环境需要擦用分片+副本集的部署方式 组成部分 route: 提供入口,不存储数据 configserver: 存储元数据信息,建议使用副本集 shardserver: 数据存储服务,存储真正数据, 也许要使用副本集 依赖关系 当数据插入时,需要从configsrv知道数据要插入哪个shardsrv分片 当用户获取数据时,需要从configsrv知道数据存储在哪个shardsrv分片 集群搭建 使用同一份mongodb二进制文件 修改对应

MongoDB(三)::小的细节问题

1.文档 {“greeting”:“hello,world”,“foo”: 3} 文档中的键/值对是有序的,下面的文档与上面的文档是完全不同的两个文档. {“foo”: 3 ,“greeting”:“hello,world”} 2.使用场景 MongoDB 的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS 系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身.根据官方网站的描述,Mongo 适用于以下场景. ● 网站数据:Mongo 非常适合实时的插入,更新与查

MongoDB (三) MongoDB 安装

MongoDB安装在Windows上 在 Windows上,首先要安装 MongoDB下载最新发布的MongoDB: http://www.mongodb.org/downloads 确保得到正确的版本取决于您的 Windows 版本的MongoDB.为了得到 Windows版本打开命令提示符并执行以下命令: C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\> 只支持32位版本的MongoDB数据库小于2GB,适合仅用于测试和评估

MongoDB(三) 常用操作

MongoDB 常用操作 # 查看索引是否存在 > db.boundary.ensureIndex({ "geometry" : "2dsphere" } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 2, "note" : "all in

MongoDB 2.6复制集单节点部署(三)

MongoDB在单节点中也可以做复制集,但是仅限于测试实验,最大的好处就是部署方便快速,可以随便添加新节点,节省资源.在这里我使用的是MongoDB 2.6版本进行复制集实验(但MongoDB配置文件使用的是老版本格式),一共使用三个节点,一个是主节点(PRIMARY),一个是从节点(SECONDARY),一个是投票节点(ARBITER).如下图: 一.实验环境 1)节点信息:192.168.60.60 3)节点确保iptables和selinux已关闭 1 2 [root@node1 ~]#