首页 > 数据库 >Python爬虫之mongodb的索引操作

Python爬虫之mongodb的索引操作

时间:2022-10-14 11:36:21浏览次数:48  
标签:name Python mongodb db 爬虫 t1 索引 创建


Mongodb的索引操作

学习目标
  1. 掌握 mongodb索引的创建,删除操作
  2. 掌握 mongodb查看索引的方法
  3. 掌握 mongodb创建唯一索引的方法

1. 为什么mongdb需要创建索引

  • 加快查询速度
  • 进行数据的去重

2. mongodb创建简单的索引方法

  • 语法:​​db.集合名.ensureIndex({属性:1})​​,1表示升序, -1表示降序

3. 创建索引前后查询速度对比

测试:插入10万条数据到数据库中

插入数据:

for(i=0;i<100000;i++){db.t1.insert({name:'test'+i,age:i})}

创建索引前:

db.t1.find({name:'test10000'})
db.t1.find({name:'test10000'}).explain('executionStats') # 显示查询操作的详细信息

创建索引:

db.t1.ensureIndex({name:1})

创建索引后:

db.t1.find({name:'test10000'}).explain('executionStats')

前后速度对比

Python爬虫之mongodb的索引操作_字段

4. 索引的查看

默认情况下_id是集合的索引
查看方式:​​​db.集合名.getIndexes()​

5. 删除索引

语法:​​db.集合名.dropIndex({'索引名称':1})​

db.t1.dropIndex({name:1})
db.t1.getIndexes()

6. mongodb创建唯一索引

在默认情况下mongdb的索引域的值是可以相同的,创建唯一索引之后,数据库会在插入数据的时候检查创建索引域的值是否存在,如果存在则不会插入该条数据,但是创建索引仅仅能够提高查询速度,同时降低数据库的插入速度。

6.1 添加唯一索引的语法:

db.集合名.ensureIndex({"字段名":1}, {"unique":true})

6.2 利用唯一索引进行数据去重

根据唯一索引指定的字段的值,如果相同,则无法插入数据

db.t1.ensureIndex({"name":1}, {"unique":true})
db.t1.insert({name: 'test10000'})

7. 建立复合索引

在进行数据去重的时候,可能用一个域来保证数据的唯一性,这个时候可以考虑建立复合索引来实现。

例如:抓全贴吧信息,如果把帖子的名字作为唯一索引对数据进行去重是不可取的,因为可能有很多帖子名字相同

建立复合索引的语法:​​db.collection_name.ensureIndex({字段1:1,字段2:1})​

8. 建立索引注意点

  • 根据需要选择是否需要建立唯一索引
  • 索引字段是升序还是降序在单个索引的情况下不影响查询效率,但是带复合索引的条件下会有影响
  • 数据量巨大并且数据库的读出操作非常频繁的时候才需要创建索引,如果写入操作非常频繁,创建索引会影响写入速度

例如:在进行查询的时候如果字段1需要升序的方式排序输出,字段2需要降序的方式排序输出,那么此时复合索引的建立需要把字段1设置为1,字段2设置为-1

课后思考

数据库为什么要做读写分离(读写分离的意义)?

小结

  1. 掌握mongodb索引的创建,删除操作
  2. 掌握mongodb查看索引的方法
  3. 掌握mongodb创建唯一索引的方法


标签:name,Python,mongodb,db,爬虫,t1,索引,创建
From: https://blog.51cto.com/u_15829196/5755958

相关文章

  • Python爬虫之scrapy构造并发送请求
    scrapy数据建模与请求学习目标:应用在scrapy项目中进行建模应用构造Request对象,并发送请求应用利用meta参数在不同的解析函数中传递数据1.数据建模通常在做项目的过程中,......
  • Python爬虫之scrapy模拟登陆
    scrapy模拟登陆学习目标:应用请求对象cookies参数的使用了解start_requests函数的作用应用构造并发送post请求1.回顾之前的模拟登陆的方法1.1requests模块是如何实现模......
  • Python爬虫之scrapy_redis原理分析并实现断点续爬以及分布式爬虫
    scrapy_redis原理分析并实现断点续爬以及分布式爬虫学习目标了解scrapy实现去重的原理了解scrapy中请求入队的条件掌握scrapy_redis基于url地址的增量式单机爬虫掌握scr......
  • Python爬虫之scrapy_redis概念作用和流程
    scrapy_redis概念作用和流程学习目标了解分布式的概念及特点了解scarpy_redis的概念了解scrapy_redis的作用了解scrapy_redis的工作流程在前面scrapy框架中我们已经能够......
  • python对utf-8的中文转换
    #python3默认支持utf-8,因此对于\uXXXX这种格式的中文,可以直接转换,但经常爬虫抓取回来的中文是\\uXXXX格式,因此需要进行转换s1='\u65f6\u4e0d\u53ef\u5931\uff0c\u65f6\u4......
  • python2 | python3 | 文本清洗正则匹配
    python3写的清洗文本代码在python2用不了,会出现各种编码问题,经过痛苦的一晚上加班终于搞完了,记录一下。python2defclean_text(content):"""去除话题词,链接,@用户,图......
  • python 查看文件最新的几行
      importlinecachedefget_line_count(filename):count=0withopen(filename,'r')asf:whileTrue:buffer=f.read(1024*......
  • Python Select 解析
    首先列一下,sellect、poll、epoll三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中......
  • 力扣609(java&python)-在系统中查找重复文件(中等)
    给你一个目录信息列表 paths,包括目录路径,以及该目录中的所有文件及其内容,请你按路径返回文件系统中的所有重复文件。答案可按任意顺序返回。一组重复的文件至少包括......
  • python重拾第十天-协程、异步IO
    本节内容Gevent协程Select\Poll\Epoll异步IO与事件驱动引子到目前为止,我们已经学了网络并发编程的2个套路,多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回......