返回頂部
關閉軟件導航
位置:首頁 > 技術分享 > SEO優化>10GEN工程師談MangoDB組合索引的優化

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

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

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

查詢的結果顯然是3。但是,這里的重點是看MangGDB是如何通過解釋()來實現查詢的。

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

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

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

10GEN工程師談MangoDB組合索引的優化

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

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

那么,我們怎樣才能回到完美的nScNdNe=nScNeNdObjs=n這里我們嘗試一個關于時間戳和匿名的復合索引:

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

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

MangGDB復合索引的關鍵字序列問題與其他數據庫相同。假如匿名被用作索引中的第一個關鍵字,Mongo將直接調用到匿名=false文檔,用于時間戳2到4范圍。

第一部分是對MangGDB復合索引的優化思想的簡要理解,但事實上,這種情況只存在于理想中。

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

讓我們從一個有趣的事情開始:我們沒有刪除前一個例子中的索引,所以MangGDB永遠是我們構建的三個索引中的優選。為什么會這樣呢

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

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

考慮到這個非常蒼白的表達式,讓我們具體地了解這兩個部分是如何工作的。當優化器需要選擇一組沒有尤其優勢的索引中的一個時,它會收集相關查詢的所有相關索引,并選擇第一個完成索引。

所有三個索引都是相關的,因此MangGDB以任意順序加入三個索引,并依次標記每個索引的條目:

在這個競爭中,右邊的索引顯然比其他兩個更完整,然后它將永遠存在于下一個競爭之前的很佳索引。簡而言之:在多個索引的情況下,MangGDB更傾向于具有很低掃描值的索引。

現在我們有一個完美的時間戳索引在2到4之間,我們很后的步驟是排序。

這通常是以前做過的,現在也是很好的:nScNdNe=nScNeNdObjs=n。但是不要忽略這個:SCANandOrth=真。這意味著MangGDB將所有查詢結果放入內存中,對它們進行排序,然后同時輸出它們。但是,我們必須考慮:這將占用大量的麻木。Mongo服務器和RAM的ER,而不是輸出批處理結果,而是將它們全部放在內存中,并將輸出的資源與應用服務器進行嚴重競爭。很后,Mongo將對數據施加32MB約束并將其排序在內存中。盡管只有4個CO。在我們的討論中,我們已經設計了數以千萬計的系統。

那么我們如何處理Snand命令我們需要添加一個索引,這樣Mongo就可以直接進入ANONYALY=FALSE部分,按需要的順序掃描這個部分:

Mongo使哈爾濱網站優化用這個指數嗎當然不會,因為這個索引不會贏得競爭中很小的nSnDead索引。優化器無法識別哪個索引對排序有用。

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

這就是為什么優化器不選擇這個索引來執行舊的匿名、時間戳索引,它具有低N掃描但完全在內存排序中的原因。

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

當然,您必須考慮是否將時間戳添加到索引中,因為時間戳給內存帶來的額外空間不會花費任何代價。

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

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

有很多因素決定了復合索引的建立。雖然本文不答應您直接確定一個很優索引,但它確實答應您縮小索引創建的選擇。

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

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

如果您覺得 10GEN工程師談MangoDB組合索引的優化 這篇文章對您有用,請分享給您的好友,謝謝!

主站蜘蛛池模板: 一本一道VS无码中文字幕| 久久成人无码国产免费播放| 国产色综合久久无码有码 | 一区二区无码免费视频网站| 国内精品久久人妻无码不卡| 亚洲精品无码AV人在线播放| 亚洲av无码一区二区三区在线播放 | 亚洲av无码av制服另类专区| 色欲AV无码一区二区三区| 亚洲av无码不卡| 丰满日韩放荡少妇无码视频| 免费看无码自慰一区二区| 欧洲精品久久久av无码电影| 中文字幕无码精品亚洲资源网| 亚洲最大天堂无码精品区| 国产AV无码专区亚洲Av| 无码人妻一区二区三区免费视频 | 国内精品久久久久久无码不卡| 无码人妻一区二区三区免费看| 亚洲AV无码成H人在线观看| 性色AV蜜臀AV人妻无码| 92午夜少妇极品福利无码电影| 亚洲桃色AV无码| 成在线人免费无码高潮喷水| 精品乱码一区内射人妻无码| 国产精品无码无卡在线观看久| 无码国产精品一区二区免费16| 日韩人妻无码一区二区三区久久99 | 国产成人无码免费网站| 国产精品午夜无码av体验区| 无码AV大香线蕉| 国产综合无码一区二区色蜜蜜| 伊人久久精品无码麻豆一区| 亚洲精品无码专区在线播放| 无码国产精品一区二区免费 | 亚洲av成人无码网站…| 亚洲AV无码成人精品区日韩| 少妇久久久久久人妻无码| 欧洲精品无码成人久久久| 极品无码国模国产在线观看| 无码人妻一区二区三区精品视频|