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