创建索引
- 索引:以提升查询速度
- 测试:
1.插入10万条数据到数据库中
2.统计for(i=0;i<100000;i++){db.t255.insert({name:'test'+i,age:i})}
t255
集合中文档总数
3.直接查找db.t255.find().count()
test10000
的文档
4.查看在查找db.t255.find({name:"test10000"})
test10000
时花费的时间
查找下图中的字段:发现花费了84毫秒db.t255.find({name:"test10000"}).explain("executionStats")
5.为test10000
的文档创建索引
6.重新查看在查找db.t255.ensureIndex({name:"test10000"})
test10000
时花费的时间
查找下图中的字段:发现花费了0毫秒db.t255.find({name:"test10000"}).explain("executionStats")
- 测试:
索引类型
- 爬虫去重:使用数据库建立关键字段(一个或者多个)建立索引进行去重
- 1.创建唯一索引:
db.t1.ensureIndex({"name":1},{"unique":true})
- 2.建立联合索引:(什么时候需要联合索引?需要判断文档的唯一性时)
db.t1.ensureIndex({name:1},{age:1})
- 3.查看当前集合的所有索引:
db.t1.ensureIndex({name:1},{age:1})
- 4.删除索引:
db.t1.dropIndex({'索引名称':1})
- 1.创建唯一索引:
- 1.根据url地址进行去重:
- 使用场景:
- url地址对应的数据不会变的情况,url地址成为唯一判断一条数据的情况。
- 思路:
- url 存在redis中
- 拿到url地址,判断url在redis的url集合中是否存在
- 存在:说明url已经请求过,不再请求
- 不存在:url地址没有被请求过,去请求并存入redis集合中
- 布隆过滤器
- 使用多个加密算法加密url地址,得到多个值,往对应值的位置把结果设置为1,新来一个url地址,一样通过加密算法生成多个值
- 如果对应位置的值为1,说明这个url地址已经抓过,否则没抓过,就把对应位置的值设置为1
- 使用场景:
- 2.根据数据本身去重:
- 选择特定的字段,使用加密算法(MD5,sha1,sha256)将字段进行加密,生成字符串,存入redis的集合中
- 后续新来一条数据,同样的方法进行加密,如果得到的字符串在redis中存在,说明数据存在,然后对数据进行更新。否则说明数据不存在,直接插入。