摘要:在生產環境里,這簡直就是夢魘,因為沒辦法中止索引構建。最明智的建議是將索引構建當做某類數據庫遷移來看待,確保應用程序的代碼不會自動聲明索引。索引的構建分為兩步。如果發生在生產環境里,這無疑是很糟糕的,這也是長時間索引構建讓人抓狂的原因。
聲明索引時要小心
由于這個步驟太容易了,所以也很容易在無意間觸發索引構建。如果數據集很大,構建會花很長時間。在生產環境里,這簡直就是夢魘,因為沒辦法中止索引構建。如果發生了這種情況,你將不得不故障轉移到從節點上——如果有從節點的話。最明智的建議是將索引構建當做某類數據庫遷移來看待,確保應用程序的代碼不會自動聲明索引。
索引的構建分為兩步。第一步,對要索引的值排序。經過排序的數據集在插入到B樹時會更高效。注意,排序的進度會以已排序文檔數和總文檔數的比率來進行顯示:
[conn1] building new index on { open: 1.0, close: 1.0 } for stocks.values 1000000/4308303 23% 2000000/4308303 46% 3000000/4308303 69% 4000000/4308303 92% Tue Jan 4 09:59:13 [conn1] external sort used : 5 files in 55 secs
第二步,排序后的值被插入索引中。進度顯示方式與第一步相同,完成之后,完成索引構建所用的時間會顯示出來,作為插入system.indexes的耗時:
1200300/4308303 27% 2227900/4308303 51% 2837100/4308303 65% 3278100/4308303 76% 3783300/4308303 87% 4075500/4308303 94% Tue Jan 4 10:00:16 [conn1] done building bottom layer, going to commit Tue Jan 4 10:00:16 [conn1] done for 4308303 records 118.942secs
還要注意lockType,它說明索引構建用了寫鎖,也就是說其他客戶端此時無法讀寫數據庫。如果發生在生產環境里,這無疑是很糟糕的,這也是長時間索引構建讓人抓狂的原因。
后臺索引如果是在生產環境里,經不住這樣暫停數據庫訪問的情況,可以指定在后臺構建索引。雖然索引構建仍會占用寫鎖,但構建任務會停下來允許其他讀寫操作訪問數據庫。如果應用程序大量使用MongoDB,后臺索引會降低性能,但在某些情況下這是可接受的。例如,假設你知道可以在應用程序流量最低的時間窗口內完成索引的構建,那么這時后臺索引會是個不錯的選擇。
要在后臺構建索引,聲明索引時需要指定{background: true}。可以像下面這樣在后臺構建之前的索引:
db.values.ensureIndex({open: 1, close: 1}, {background: true})離線索引
如果生產數據集太大,無法在幾小時內完成索引,這時就需要其他方案了。通常這會涉及讓一個副本節點下線,在該節點上構建索引,隨后讓其上的數據與主節點同步。一旦完成數據同步,將該節點提升為主節點,再讓另一個從節點下線,構建它自己的索引。該策略假設你的復制oplog夠大,能避免離線節點的數據在索引構建過程中變得過舊。下一章會詳細討論復制,應該能幫你計劃這樣的遷移過程。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18930.html
摘要:密集索引的索引默認都是密集型的。也就是說,在一個有索引的集合里,每個文檔都會有對應的索引項,哪怕文檔中沒有被索引鍵也是如此。稀疏索引在稀疏索引里,只會出現被索引鍵有值的文檔。這種情況下密集型索引并不適合,你所需要的是稀疏索引。 密集索引 mongo的索引默認都是密集型的。也就是說,在一個有索引的集合里,每個文檔都會有對應的索引項,哪怕文檔中沒有被索引鍵也是如此。例如,電子商務數據模型里...
摘要:推薦閱讀資源庫工具應用程序精選列表中文版有哪些鮮為人知,但是很有意思的網站一份攻城獅筆記每天搜集上優秀的項目一些有趣的民間故事超好用的谷歌瀏覽器油猴插件合集目錄資源文檔文章圖書會談教程更多庫工具管理數據部署桌面發展監控應用資源文檔介紹文檔教 推薦閱讀 MongoDB 資源、庫、工具、應用程序精選列表中文版 有哪些鮮為人知,但是很有意思的網站? 一份攻城獅筆記 每天搜集 Github ...
摘要:此文成于年月現狀目前的穩定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎上目前國內有兩個中文分詞解決方案一個是一個是沒有官網文檔較少可查到的最新版本可支持官方還在維護但貌似不打 NOTE : 此文成于 2017 年 3 月. 現狀: Sphinx 目前的穩定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
摘要:此文成于年月現狀目前的穩定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎上目前國內有兩個中文分詞解決方案一個是一個是沒有官網文檔較少可查到的最新版本可支持官方還在維護但貌似不打 NOTE : 此文成于 2017 年 3 月. 現狀: Sphinx 目前的穩定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
閱讀 2831·2023-04-26 02:23
閱讀 1570·2021-11-11 16:55
閱讀 3149·2021-10-19 11:47
閱讀 3352·2021-09-22 15:15
閱讀 1975·2019-08-30 15:55
閱讀 1033·2019-08-29 15:43
閱讀 1288·2019-08-29 13:16
閱讀 2188·2019-08-29 12:38