聊聊MongoDB MongoDB索引介紹分享

2021-09-19 14:36:58 字數 2535 閱讀 6228

mongodb中的索引其實類似於關係型資料庫,都是為了提高查詢和排序的效率的,並且實現原理也基本一致。由於集合中的鍵(字段)可以是普通資料型別,也可以是子文件。mongodb可以在各種型別的鍵上建立索引。

db.testcollection.ensureindex(,unique:ture)

db.mycol.find().pretty()

說明:這是一段簡單的索引的建立**。

說明:這是乙個典型的mongodb集合文件的結構,其中我們可以看到集合有乙個預設索引_id。

mongodb索引分為7類:

[1]預設索引(_id索引):mongodb有個預設的「_id」的鍵,他相當於「主鍵」的角色。集合建立後系統會自動建立乙個索引在「_id」鍵上,它是預設索引,索引名叫「_id_」,是無法被刪除的,_id值也是恆定不變的。

[2]單鍵索引:索引值為乙個單一的值,比如字串,更新日期等等。

[3]多建索引:索引值為多個值同時存在,例如陣列。

[4]復合索引:單鍵索引和多建索引的結合。

[5]過期索引:在一段時間後會過期(自動銷毀記錄)的索引,適合用於處理使用者登入資訊等具有時間侷限的記錄過期處理(比較多的做法是session或者cookie),對一些儲存日誌的過期處理等等用途。

[6]全文索引:主要用於搜尋業務的索引,通過多種不同的查詢方式和條件進行mongodb全文索引,適合搜尋引擎和站內搜尋業務。

注:索引的最終目標是提公升查詢效率和速度,索引不能過多,需要理性建立最適合的。

注:過期索引 :儲存的字段值必須是指定的時間型別isodate或者是isodate陣列,不能使用時間戳,否則索引會失效。

注:過期索引:記錄自動銷毀程序是每60s跑一次的後台程式,並不是很準時的自動程式。

注:過期索引:如果指定了isodate陣列,那麼程式會自動吧陣列內時間最早的那條記錄銷毀掉。

注:過期索引:過期索引不能被復合索引所引用。

注:全文索引:mongodb全文索引目前不支援中文。

建立:

db.testcollection.ensureindex()
查詢:

db.testcollection.find(},}).sort(})
全文索引有四種查詢方式:

(1)查詢單條記錄:

db.testcollection.find(})
(2)用空格隔開實現多欄位索引查詢(或查詢):

db.testcollection.find(})
(3)-可以使得查詢結果不能含有指定字段:

db.testcollection.find(})
(4)用"來實現「且」查詢(並列查詢):

db.testcollection.find(})
注:mongodb全文索引每次查詢只能指定乙個$text查詢

注:地理位置索引:查詢距離某點的一定距離範圍內的點;查詢包含在某一區域所有點。

注:地理位置索引:有兩個子分類。

(1)2d索引:平面地理位置索引

(2)2dsphere索引:球面地理位置索引

建立:

(1)2d索引:

db.a.ensureindex()

//*位置表示方式:經緯度[經度,緯度],取值範圍:經度[-180,180]緯度[-90,90]

(2)2dsphere索引:

db.a.ensureindex()

//*位置表示方式:geojson描述點、線、多邊形,格式:,支援$mindistance,$maxdistance

查詢:

(1)2d索引:

$near查詢:查詢距離某個點最近的點。

例:

db.a.find(}) 

//*查詢在點[1,1]距離最近的10個點。

$geowithin查詢:查詢某個形狀內的點。

例1:

db.a.find(}}) 

//*查詢在左邊界[0,0],右邊界[3,3]的矩形範圍內的所有點。

例2:

db.a.find(}}) 

//*查詢在[0,0]為圓心,半徑為5的圓形區域內的所有點。

例3:

db.a.find(}}) 

//*查詢在多個座標點組成的多邊形範圍內的所有點。

$geonear查詢:查詢相近的點的資料。

例:

db.command()
(2)2dsphere索引:略。

注:mongodb自帶的庫狀態管理工具mongostat:這個工具可以檢視當前mongodb的資料讀取和索引命中情況:

注:在find()後面加入explain()可以檢視查詢的詳細資訊

python iocp 聊聊IOCP,聊聊非同步程式設計

前言 io完成埠 io completion ports 在多核計算機的並行非同步io請求方面提供了一種高效的執行緒模型。當程序建立乙個io完成埠時,系統建立乙個相關聯的佇列,其唯一目的是服務與那些請求。io完成埠通常和預先分配的執行緒池配合,相比於乙個乙個建立執行緒,這使其更快更高效。iocp在程...

聊聊IOCP,聊聊非同步程式設計

io完成埠 io completion ports 在多核計算機的並行非同步io請求方面提供了一種高效的執行緒模型。當程序建立乙個io完成埠時,系統建立乙個相關聯的佇列,其唯一目的是服務與那些請求。io完成埠通常和預先分配的執行緒池配合,相比於乙個乙個建立執行緒,這使其更快更高效。iocp在程序之間...

聊聊 聊天工具

公司搬家後,對網路的限制越來越嚴格,只允許訪問網頁,主流的聊天工具msn,qq都在禁止之列,雖然一片 聲,卻無濟於事。還好還有google的gtalk,在公司的網路高壓政策下還有一條出路,只是gtalk的朋友比較少,大部分客戶都在qq,msn上,客戶紛紛打 來問怎麼不上網了?真不知如何給客戶解釋公司...