摘要:在生產(chǎn)環(huán)境里,這簡直就是夢魘,因為沒辦法中止索引構(gòu)建。最明智的建議是將索引構(gòu)建當做某類數(shù)據(jù)庫遷移來看待,確保應(yīng)用程序的代碼不會自動聲明索引。索引的構(gòu)建分為兩步。如果發(fā)生在生產(chǎn)環(huán)境里,這無疑是很糟糕的,這也是長時間索引構(gòu)建讓人抓狂的原因。
聲明索引時要小心
由于這個步驟太容易了,所以也很容易在無意間觸發(fā)索引構(gòu)建。如果數(shù)據(jù)集很大,構(gòu)建會花很長時間。在生產(chǎn)環(huán)境里,這簡直就是夢魘,因為沒辦法中止索引構(gòu)建。如果發(fā)生了這種情況,你將不得不故障轉(zhuǎn)移到從節(jié)點上——如果有從節(jié)點的話。最明智的建議是將索引構(gòu)建當做某類數(shù)據(jù)庫遷移來看待,確保應(yīng)用程序的代碼不會自動聲明索引。
索引的構(gòu)建分為兩步。第一步,對要索引的值排序。經(jīng)過排序的數(shù)據(jù)集在插入到B樹時會更高效。注意,排序的進度會以已排序文檔數(shù)和總文檔數(shù)的比率來進行顯示:
[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
第二步,排序后的值被插入索引中。進度顯示方式與第一步相同,完成之后,完成索引構(gòu)建所用的時間會顯示出來,作為插入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,它說明索引構(gòu)建用了寫鎖,也就是說其他客戶端此時無法讀寫數(shù)據(jù)庫。如果發(fā)生在生產(chǎn)環(huán)境里,這無疑是很糟糕的,這也是長時間索引構(gòu)建讓人抓狂的原因。
后臺索引如果是在生產(chǎn)環(huán)境里,經(jīng)不住這樣暫停數(shù)據(jù)庫訪問的情況,可以指定在后臺構(gòu)建索引。雖然索引構(gòu)建仍會占用寫鎖,但構(gòu)建任務(wù)會停下來允許其他讀寫操作訪問數(shù)據(jù)庫。如果應(yīng)用程序大量使用MongoDB,后臺索引會降低性能,但在某些情況下這是可接受的。例如,假設(shè)你知道可以在應(yīng)用程序流量最低的時間窗口內(nèi)完成索引的構(gòu)建,那么這時后臺索引會是個不錯的選擇。
要在后臺構(gòu)建索引,聲明索引時需要指定{background: true}??梢韵裣旅孢@樣在后臺構(gòu)建之前的索引:
db.values.ensureIndex({open: 1, close: 1}, {background: true})離線索引
如果生產(chǎn)數(shù)據(jù)集太大,無法在幾小時內(nèi)完成索引,這時就需要其他方案了。通常這會涉及讓一個副本節(jié)點下線,在該節(jié)點上構(gòu)建索引,隨后讓其上的數(shù)據(jù)與主節(jié)點同步。一旦完成數(shù)據(jù)同步,將該節(jié)點提升為主節(jié)點,再讓另一個從節(jié)點下線,構(gòu)建它自己的索引。該策略假設(shè)你的復(fù)制oplog夠大,能避免離線節(jié)點的數(shù)據(jù)在索引構(gòu)建過程中變得過舊。下一章會詳細討論復(fù)制,應(yīng)該能幫你計劃這樣的遷移過程。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/18930.html
摘要:密集索引的索引默認都是密集型的。也就是說,在一個有索引的集合里,每個文檔都會有對應(yīng)的索引項,哪怕文檔中沒有被索引鍵也是如此。稀疏索引在稀疏索引里,只會出現(xiàn)被索引鍵有值的文檔。這種情況下密集型索引并不適合,你所需要的是稀疏索引。 密集索引 mongo的索引默認都是密集型的。也就是說,在一個有索引的集合里,每個文檔都會有對應(yīng)的索引項,哪怕文檔中沒有被索引鍵也是如此。例如,電子商務(wù)數(shù)據(jù)模型里...
摘要:推薦閱讀資源庫工具應(yīng)用程序精選列表中文版有哪些鮮為人知,但是很有意思的網(wǎng)站一份攻城獅筆記每天搜集上優(yōu)秀的項目一些有趣的民間故事超好用的谷歌瀏覽器油猴插件合集目錄資源文檔文章圖書會談教程更多庫工具管理數(shù)據(jù)部署桌面發(fā)展監(jiān)控應(yīng)用資源文檔介紹文檔教 推薦閱讀 MongoDB 資源、庫、工具、應(yīng)用程序精選列表中文版 有哪些鮮為人知,但是很有意思的網(wǎng)站? 一份攻城獅筆記 每天搜集 Github ...
摘要:一個數(shù)據(jù)集中只能創(chuàng)建一個全文索引。圓形,使用表示。的提高會導(dǎo)致的提高導(dǎo)致明顯的性能問題。 mongo數(shù)據(jù)模型 文檔與集合 文檔是mongo的核心概念,本質(zhì)是是一種BSON(Binary JSON)數(shù)據(jù),BSON是一種類JSON的二進制數(shù)據(jù),可以在為JSON基礎(chǔ)上添加了一些新的數(shù)據(jù)類型,包括日期、Int32、Int64,常被作為數(shù)據(jù)存儲和網(wǎng)絡(luò)數(shù)據(jù)交換的格式,缺點是空間利用率并不理想(存在...
摘要:此文成于年月現(xiàn)狀目前的穩(wěn)定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎(chǔ)上目前國內(nèi)有兩個中文分詞解決方案一個是一個是沒有官網(wǎng)文檔較少可查到的最新版本可支持官方還在維護但貌似不打 NOTE : 此文成于 2017 年 3 月. 現(xiàn)狀: Sphinx 目前的穩(wěn)定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
摘要:此文成于年月現(xiàn)狀目前的穩(wěn)定版本為目前對英文等字母語言采用空格分詞故其對中文分詞支持不好目前官方中文分詞方案僅支持按單字分詞在基礎(chǔ)上目前國內(nèi)有兩個中文分詞解決方案一個是一個是沒有官網(wǎng)文檔較少可查到的最新版本可支持官方還在維護但貌似不打 NOTE : 此文成于 2017 年 3 月. 現(xiàn)狀: Sphinx 目前的穩(wěn)定版本為 2.2.11.Sphinx 目前對英文等字母語言采用空格分詞,故...
閱讀 2850·2023-04-26 02:23
閱讀 1602·2021-11-11 16:55
閱讀 3161·2021-10-19 11:47
閱讀 3375·2021-09-22 15:15
閱讀 1989·2019-08-30 15:55
閱讀 1050·2019-08-29 15:43
閱讀 1305·2019-08-29 13:16
閱讀 2206·2019-08-29 12:38