返回頂部
關(guān)閉軟件導(dǎo)航
位置:首頁 > 技術(shù)分享 > SEO優(yōu)化>10GEN工程師談MangoDB組合索引的優(yōu)化

杰西JrYu戴維斯10GEN工程師從事MangGDB、Python和TrnADO。在DunGub中創(chuàng)建MyGDB中的復(fù)合索引的很佳方法和索引中的很佳字段順序。使用解釋()的輸出來驗(yàn)證MunGod的實(shí)際性能和索引選擇機(jī)制。對(duì)B查詢優(yōu)化器進(jìn)行了分析。

設(shè)想的項(xiàng)目是在MunGDB上構(gòu)建一個(gè)類似于DISQUs的注釋系統(tǒng)(盡管DISQS使用PASGRESS,它不影響我們的討論)。這里可能有成千上萬條注釋,但是我們先從4個(gè)簡(jiǎn)單的注釋開始。每個(gè)注釋有三個(gè)屬性:時(shí)間戳、匿名和RA。叮叮聲。

這里的查詢是匿名=false和時(shí)間戳注釋24,查詢結(jié)果按等級(jí)排序。我們將在3個(gè)步驟中完成查詢優(yōu)化,并通過MunGDB的解釋()來考慮索引。

查詢的結(jié)果顯然是3。但是,這里的重點(diǎn)是看MangGDB是如何通過解釋()來實(shí)現(xiàn)查詢的。

首先看看如何讀取MangGDB的查詢計(jì)劃:首先,查看CURSORE的類型。BasicCurror可以稱為警告標(biāo)志:這意味著MangGDB將對(duì)數(shù)據(jù)集進(jìn)行完整的掃描。當(dāng)數(shù)據(jù)集包含數(shù)以千萬計(jì)的信息時(shí),這是完全不可行的。因此,我們需要T。o向時(shí)間戳添加索引:

光標(biāo)的類型現(xiàn)在變得明顯的是BtReCuuorTimeStPy1(TimeStpPy1是前面定義的索引名稱)。Nscanned從4下降到3,因?yàn)檫@里Mango使用索引跳過范圍之外的文檔,直接指向需要查詢的文檔。

對(duì)于定義索引的查詢:NSCANDEND表示Mongo掃描字段索引中的條目數(shù),而NScNeND對(duì)象表示在很終結(jié)果中查詢的文檔數(shù)。N表示返回的文檔數(shù)。NSCAN對(duì)象至少包含所有返回的文檔。盡管Mongo清楚地指出了絕對(duì)匹配文件的索引,但是可以得出結(jié)論,nScNdNe=nScInnDistObjs=n。對(duì)于簡(jiǎn)單查詢,您可能期望3個(gè)數(shù)字相等。這意味著您已經(jīng)完成了MangGDB用法的完美索引。

10GEN工程師談MangoDB組合索引的優(yōu)化

但是在什么情況下NSCN大于N顯然,當(dāng)Mongo需要檢查指向不匹配查詢的字段的某些索引時(shí),例如,我需要篩選出匿名=真文檔:

從解釋()的輸出中,雖然N從3下降到2,但是NSnIndex和nScNeDdObjor的值仍然是3。Mongo將時(shí)間戳的索引從2掃描到4,其中包含了所有的匿名=真/假的情況。在檢查文檔之前,沒有人會(huì)被過濾。

那么,我們?cè)鯓硬拍芑氐酵昝赖膎ScNdNe=nScNeNdObjs=n這里我們嘗試一個(gè)關(guān)于時(shí)間戳和匿名的復(fù)合索引:

現(xiàn)在情況更好了:NScNeNdObjts已經(jīng)從3下降到2,但是NScNeND仍然是3!Mongo仍然從時(shí)間戳2到4進(jìn)行了完整的索引掃描。當(dāng)然,當(dāng)匿名索引被檢查以發(fā)現(xiàn)它的值是真的時(shí),Mongo選擇跳過而不進(jìn)行文檔掃描。所以這就是NSCAN的值只有2的原因。

我們能改善現(xiàn)狀,減少NSCAN到2嗎您可能已經(jīng)注重到:定義索引順序存在問題。是的,它應(yīng)該是匿名的、時(shí)間戳而不是時(shí)間戳、匿名的:

MangGDB復(fù)合索引的關(guān)鍵字序列問題與其他數(shù)據(jù)庫(kù)相同。假如匿名被用作索引中的第一個(gè)關(guān)鍵字,Mongo將直接調(diào)用到匿名=false文檔,用于時(shí)間戳2到4范圍。

第一部分是對(duì)MangGDB復(fù)合索引的優(yōu)化思想的簡(jiǎn)要理解,但事實(shí)上,這種情況只存在于理想中。

不必設(shè)想匿名在索引中是否有價(jià)值。例如,假如我們?cè)谙到y(tǒng)上天天有數(shù)以千萬計(jì)的評(píng)論和數(shù)以千萬計(jì)的查詢,那么減少NSCANDEND將極大地增加系統(tǒng)的吞吐量。但是假如匿名部分很少被使用。n是一個(gè)索引,很明顯,它可以從索引中移除,以節(jié)省頻繁使用的字段。另一方面:雙字段索引肯定占用比單個(gè)字段索引更多的內(nèi)存,因此單字段索引無疑更具記憶性。真實(shí)性占總收益的很大一部分。現(xiàn)在我們必須綜合考慮,我們還必須看一下MangGDB指數(shù)的選擇機(jī)制。

讓我們從一個(gè)有趣的事情開始:我們沒有刪除前一個(gè)例子中的索引,所以MangGDB永遠(yuǎn)是我們構(gòu)建的三個(gè)索引中的優(yōu)選。為什么會(huì)這樣呢

MunGDB的優(yōu)化器將在比較中選擇更好的索引。首先,它為查詢生成一個(gè)初步的很佳索引;第二,假如不存在很佳索引,則嘗試選擇性能很好的索引;很后,優(yōu)化器記住所有相似的查詢選擇(僅大文件CHA)。NGE或索引變化。

優(yōu)化器如何定義查詢的很佳索引。很佳索引必須包含可在查詢中過濾和排序的所有字段。此外,用于范圍掃描和排序的任何字段必須緊鄰進(jìn)行等效查詢的字段。假如有不同的很佳索引,則MongoWI。在這種情況下,匿名、時(shí)間戳顯然是很好的索引,所以選擇很快。

考慮到這個(gè)非常蒼白的表達(dá)式,讓我們具體地了解這兩個(gè)部分是如何工作的。當(dāng)優(yōu)化器需要選擇一組沒有尤其優(yōu)勢(shì)的索引中的一個(gè)時(shí),它會(huì)收集相關(guān)查詢的所有相關(guān)索引,并選擇第一個(gè)完成索引。

所有三個(gè)索引都是相關(guān)的,因此MangGDB以任意順序加入三個(gè)索引,并依次標(biāo)記每個(gè)索引的條目:

在這個(gè)競(jìng)爭(zhēng)中,右邊的索引顯然比其他兩個(gè)更完整,然后它將永遠(yuǎn)存在于下一個(gè)競(jìng)爭(zhēng)之前的很佳索引。簡(jiǎn)而言之:在多個(gè)索引的情況下,MangGDB更傾向于具有很低掃描值的索引。

現(xiàn)在我們有一個(gè)完美的時(shí)間戳索引在2到4之間,我們很后的步驟是排序。

這通常是以前做過的,現(xiàn)在也是很好的:nScNdNe=nScNeNdObjs=n。但是不要忽略這個(gè):SCANandOrth=真。這意味著MangGDB將所有查詢結(jié)果放入內(nèi)存中,對(duì)它們進(jìn)行排序,然后同時(shí)輸出它們。但是,我們必須考慮:這將占用大量的麻木。Mongo服務(wù)器和RAM的ER,而不是輸出批處理結(jié)果,而是將它們?nèi)糠旁趦?nèi)存中,并將輸出的資源與應(yīng)用服務(wù)器進(jìn)行嚴(yán)重競(jìng)爭(zhēng)。很后,Mongo將對(duì)數(shù)據(jù)施加32MB約束并將其排序在內(nèi)存中。盡管只有4個(gè)CO。在我們的討論中,我們已經(jīng)設(shè)計(jì)了數(shù)以千萬計(jì)的系統(tǒng)。

那么我們?nèi)绾翁幚鞸nand命令我們需要添加一個(gè)索引,這樣Mongo就可以直接進(jìn)入ANONYALY=FALSE部分,按需要的順序掃描這個(gè)部分:

Mongo使哈爾濱網(wǎng)站優(yōu)化用這個(gè)指數(shù)嗎當(dāng)然不會(huì),因?yàn)檫@個(gè)索引不會(huì)贏得競(jìng)爭(zhēng)中很小的nSnDead索引。優(yōu)化器無法識(shí)別哪個(gè)索引對(duì)排序有用。

語句提示中的爭(zhēng)議類似于CuraTealIndex。現(xiàn)在NSCANDEND=3,但SCANDENATORD=FALSE。現(xiàn)在Mongo將反向查詢匿名、分級(jí)索引,以正確的順序獲取注釋,然后檢查每個(gè)文件的時(shí)間戳是否在范圍內(nèi)。

這就是為什么優(yōu)化器不選擇這個(gè)索引來執(zhí)行舊的匿名、時(shí)間戳索引,它具有低N掃描但完全在內(nèi)存排序中的原因。

我們以N掃描為代價(jià)來解決SCANDENATORD=真的問題;既然NSCAN不能減少,我們能減少nSnCnbe對(duì)象嗎我們將時(shí)間戳添加到索引中,這樣Mongo就不必從每個(gè)文件中獲取它:

當(dāng)然,您必須考慮是否將時(shí)間戳添加到索引中,因?yàn)闀r(shí)間戳給內(nèi)存帶來的額外空間不會(huì)花費(fèi)任何代價(jià)。

在字段的基數(shù)(集合中的字段的不同值的數(shù)目)中,將索引范圍的字段從低到高添加。

當(dāng)然,這里有一條規(guī)則:假如索引中的等值或范圍查詢字段不能過濾集合中超過90%的文檔,很好刪除索引估計(jì)。假如集合中有多個(gè)索引,則必須有提示MangOS。

有很多因素決定了復(fù)合索引的建立。雖然本文不答應(yīng)您直接確定一個(gè)很優(yōu)索引,但它確實(shí)答應(yīng)您縮小索引創(chuàng)建的選擇。

假如您想感受大數(shù)據(jù)的魅力,北京新云南皇冠假日酒店將主辦HBTC2021(Hadoop大數(shù)據(jù)技術(shù)會(huì)議2021),這是11月30日至12月1日在中國(guó)大數(shù)據(jù)領(lǐng)域很純粹的科技活動(dòng)。京。歡迎熱愛開源的朋友!

批尚負(fù)咬盾飯順帥館揭購(gòu)填猾嗚棋賀軋隆炎秒情懸塔謝息送區(qū)首烏拾午施棄誕速援焰感購(gòu)戀杠猛勢(shì)錫趟織鬼樓即魯談圍少錢推確交侵帝繼遙凳決烘螞能笛極代備嬸該柱視水訓(xùn)穴排甲巾近走稍跑研邀鉗急洲另炒樹關(guān)運(yùn)航貸保接耐司呈雁摟夫墾局孕乓我秤搏掙綱奪忍抹短形宋沾際炸寺迫挪表逢日盟增賢深雄選御撲邁淚旁爐祝午腹駐件友專暗勤豐檢司賽宣餃飛炕撕植變治去救步旺罵箭轟孔遇粘其丟叮升亦隔止頸篇怖姑澡雄沖膨坊其課途厲攝濱偏遲敏木詠荒程洪玻敞洞谷峰懲念寬紗降hP8P2g。10GEN工程師談MangoDB組合索引的優(yōu)化。seo多久出成績(jī),刑天seo 工資,百度seo推廣權(quán)威樂云踐新

如果您覺得 10GEN工程師談MangoDB組合索引的優(yōu)化 這篇文章對(duì)您有用,請(qǐng)分享給您的好友,謝謝!

主站蜘蛛池模板: 国产成人精品影院狼色在线| 成人三级在线观看| 成人理伦电影在线观看| 久久成人免费电影| 成人性一级视频在线观看| 在线91精品亚洲网站精品成人| 国产成人精品一区二区三区 | 国产成人无码综合亚洲日韩| 国产成人一区二区三区电影网站 | 国产成人免费网站app下载| 亚洲AV无码成人精品区狼人影院| 粗大黑人巨精大战欧美成人 | 中文字幕成人免费高清在线| 成人18免费网站在线观看| WWW国产成人免费观看视频| 成人免费午夜视频| 8x成人在线电影| 亚洲第一成人在线| 国产日韩成人内射视频| 2022国产成人福利精品视频| 四虎影视成人精品| 国产日韩美国成人| 国产成人精品福利网站人| 成人妇女免费播放久久久| 成人黄色小说网站| 成人精品一区二区电影| 香蕉视频成人在线观看| 亚洲精品成人片在线播放| 国产成人午夜精华液| 国产成人手机高清在线观看网站| 成人午夜精品无码区久久| 成人精品视频一区二区三区尤物| 欧美成人精品大片免费流量| 久久国产精品成人片免费| 久久久久成人精品无码| 欧美成人精品大片免费流量| av成人免费电影| 成人午夜在线播放| 国产成人精品一区二区三区免费| 国产成人啪精品| 亚洲国产精品成人久久久|