这些天项目改版,时间比较紧,博客也就没跟得上,还望大家见谅。
好,今天分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性能优化,而程序的操作无非就是CURD,通常我们
又会花费50%的时间在R上面,因为Read操作对用户来说是非常敏感的,处理不好就会被人唾弃,呵呵。
从算法上来说有5种经典的查找,具体的可以参见我的算法速成系列,这其中就包括我们今天所说的“索引查找”,如果大家对sqlserver比较了解
的话,相信索引查找能给我们带来什么样的性能提升吧。
我们首先插入10w数据,上图说话:
一:性能分析函数(explain)
好了,数据已经插入成功,既然我们要做分析,肯定要有分析的工具,幸好mongodb中给我们提供了一个关键字叫做“explain",那么怎么用呢?
还是看图,注意,这里的name字段没有建立任何索引,这里我就查询一个“name10000”的姓名。
仔细看红色区域,有几个我们关心的key。
cursor: 这里出现的是”BasicCursor",什么意思呢,就是说这里的查找采用的是“表扫描”,也就是顺序查找,很悲催啊。
nscanned: 这里是10w,也就是说数据库浏览了10w个文档,很恐怖吧,这样玩的话让人受不了啊。
n: 这里是1,也就是最终返回了1个文档。
millis: 这个就是我们最最最....关心的东西,总共耗时114毫秒。
二:建立索引(ensureIndex)
在10w条这么简单的集合中查找一个文档要114毫秒有一点点让人不能接收,好,那么我们该如何优化呢?mongodb中给
我们带来了索引查找,看看能不能让我们的查询一飞冲天.....
这里我们使用了ensureIndex在name上建立了索引。”1“:表示按照name进行升序,”-1“:表示按照name进行降序。
我的神啊,再来看看这些敏感信息。
cursor: 这里出现的是”BtreeCursor",这么牛X,mongodb采用B树的结构来存放索引,索引名为后面的“name_1"。
nscanned: 我擦,数据库只浏览了一个文档就OK了。
n: 直接定位返回。
millis: 看看这个时间真的不敢相信,秒秒杀。
通过这个例子相信大家对索引也有了感官方面的认识了吧。
三:唯一索引
和sqlserver一样都可以建立唯一索引,重复的键值自然就不能插入,在mongodb中的使用方法是:
db.person.ensureIndex({"name":1},{"unique":true})。
四:组合索引
有时候我们的查询不是单条件的,可能是多条件,比如查找出生在‘1989-3-2’名字叫‘jack’的同学,那么我们可以建立“姓名”和"生日“
的联合索引来加速查询。
看到上图,大家或者也知道name跟birthday的不同,建立的索引也不同,升序和降序的顺序不同都会产生不同的索引,
那么我们可以用getindexes来查看下person集合中到底生成了那些索引。
此时我们肯定很好奇,到底查询优化器会使用哪个查询作为操作,呵呵,还是看看效果图:
看完上图我们要相信查询优化器,它给我们做出的选择往往是最优的,因为我们做查询时,查询优化器会使用我们建立的这些索引来创建查询方案,
如果某一个先执行完则其他查询方案被close掉,这种方案会被mongodb保存起来,当然如果非要用自己指定的查询方案,这也是
可以的,在mongodb中给我们提供了hint方法让我们可以暴力执行。
五: 删除索引
可能随着业务需求的变化,原先建立的索引可能没有存在的必要了,可能有的人想说没必要就没必要呗,但是请记住,索引会降低CUD这三
种操作的性能,因为这玩意需要实时维护,所以啥问题都要综合考虑一下,这里就把刚才建立的索引清空掉来演示一下:dropIndexes的使用。
相关推荐
快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第五天 主从复制 8天学通MongoDB——第四天 索引操作 8天学通...
为了能够与MongoDB交互并执行各种数据库操作,首先需要通过官方提供的驱动程序或其他第三方库建立连接。 - **使用官方驱动程序连接**: - **Python环境下的连接方式**:推荐使用`pymongo`库。安装该库后,可以通过...
本教程的目的是在8天内帮助初学者掌握MongoDB的基础知识,第一天主要讲解入门内容。 首先,要开始学习MongoDB,你需要从官方网站下载适合你系统的安装包。MongoDB提供32位和64位版本,32位版本的最大存储限制是2GB...
4. 查询操作:学习查询语法,包括查询一个或多个字段,使用条件表达式,以及如何使用投影来选择返回的字段。 5. 更新与删除:了解如何更新文档的部分内容,以及如何删除文档和集合。 6. 键与索引:讨论唯一性键、...
### 2021Java字节跳动面试题——面向字节_MongoDB.pdf #### 知识点一:NoSQL数据库与RDBMS的区别及其应用场景 - **NoSQL数据库含义**:NoSQL(Not Only SQL)指的是非关系型数据库,这类数据库与传统的关系型...
标题“MongoDB Document”直接指向了MongoDB的核心概念之一——文档。 #### 描述:MongoDB Develop Document **描述**部分提到的是“MongoDB开发文档”,这表明文档主要面向开发者群体,旨在为他们提供深入理解...
4. **查询解析与排序**:用户输入的查询需要被解析成对索引的操作。这包括关键词提取、分词、布尔运算等。之后,根据相关性算法(如TF-IDF、BM25)对结果进行排序。 5. **结果显示**:最后,将搜索结果以用户友好的...
第4章 理解存储架构 62 4.1 使用面向列的数据库 63 4.1.1 使用关系型数据库中的表格和列 63 4.1.2 列数据库对比RDBMS 65 4.1.3 列数据库当做键/值对的嵌套映射表 67 4.1.4 Webtable布局 70 4.2 HBase分布式...
Python的`sqlite3`库可处理轻量级数据存储,对于大型项目,可能需要用到`MySQL`或`PostgreSQL`等关系型数据库,或者`MongoDB`这样的非关系型数据库。 7. **搜索引擎原理**:理解TF-IDF、BM25等文本相似度算法,这些...
4. **数据库管理**:存储和管理索引数据,可能使用关系型数据库(如MySQL)或非关系型数据库(如MongoDB),需要掌握SQL查询和NoSQL数据模型。 5. **前端开发**:构建用户友好的搜索界面,可能涉及HTML、CSS、...
MongoDB还支持复杂的查询和更新操作,包括使用聚合框架进行数据分析、创建索引以优化查询性能,以及使用正则表达式、数组操作符等进行高级查询。 在实际应用中,通常会使用MongoDB的驱动程序,如MongoDB Node.js...
- **范式理论**:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等,指导数据库表结构设计。 - **索引优化**:创建合适的数据索引,提高查询速度。 6. **Web数据库安全**: - **权限管理**:设置不同级别的...
在这个案例中,我们关注的是名为“pymongo-3.2.1-py3.2-win32.egg”的压缩包,它是PyPI上一个针对Python 3.2和Windows平台的MongoDB驱动程序——pymongo的特定版本。 MongoDB是一种流行的NoSQL数据库,以其灵活性、...
这个系统设计为高可用性,适合高并发场景,包含了丰富的功能模块,如会员管理、第三方登录、第三方支付、订单处理、分销系统、文章管理、系统设置以及流量分析等。 系统的技术栈主要包括以下几个方面: 1. **...
Node.js和MongoDB是目前比较流行的两个技术栈,它们可以用来构建各种应用,包括日志分析系统。本文介绍了一个通过Node.js服务器端处理和MongoDB存储日志,并通过客户端进行日志数据的可视化展示的简单日志分析系统的...
9. **性能优化**:随着文档数量的增长,需要考虑缓存策略、索引优化和负载均衡等技术,以保证系统的高效运行。 10. **文档转换**:为了统一预览体验,可能需要将多种格式的文档转换为统一格式,如HTML。这可能需要...
4. 规范化理论:如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF(博科斯范式),用于减少数据冗余,提高数据一致性。 四、数据库优化 1. 索引:加速数据查询,提高数据库性能的关键技术,分为唯一索引...
4. **第5章 爬虫应用——校园网搜索引擎** 这一章深入到更复杂的爬虫项目,可能是建立一个小型的搜索引擎,涉及到网页爬取、数据存储(如SQLite或MongoDB)、索引构建以及搜索算法的实现。这需要对网络爬虫、数据库...
5. **数据库范式**:文档可能会讨论数据库正常化的不同范式,如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BCNF,以及它们在减少数据冗余和提高数据独立性中的作用。 6. **索引**:索引是提高数据库查询...