天天看點

mongodb 去重_Python爬蟲之mongodb的索引操作

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')
           

前後速度對比

mongodb 去重_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建立唯一索引的方法