MongoDB的初始化步驟有哪些以及其緩存刷新機(jī)制是什么-創(chuàng)新互聯(lián)

MongoDB的初始化步驟有哪些以及其緩存刷新機(jī)制是什么,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

發(fā)展壯大離不開(kāi)廣大客戶長(zhǎng)期以來(lái)的信賴與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都加固等,在成都網(wǎng)站建設(shè)、成都全網(wǎng)營(yíng)銷(xiāo)推廣、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開(kāi)發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。

當(dāng)內(nèi)存用盡開(kāi)始往磁盤(pán)上刷臟頁(yè)的時(shí)候,性能有非常大的波動(dòng),即使調(diào)整了syncdelay也沒(méi)有太大改善。在測(cè)試中還出現(xiàn)了一個(gè)莫名其妙的情況:MongoDB會(huì)間歇性地釋放文件系統(tǒng)的cache。下面創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,小編來(lái)講解下MongoDB的初始化步驟有哪些?MongoDB數(shù)據(jù)緩存刷新機(jī)制是什么?

MongoDB的初始化步驟有哪些

intmain(intargc,char*argv[],char*envp[])

{

Module::configAll(params);

dataFileSync.go();

initAndListen(cmdLine.port,appsrvPath);

}

顯然,dataFileSync就是我們感興趣的那個(gè)類。dataFileSync類派生自BackgroundJob類,而B(niǎo)ackgroundJob主要的功能就是生成一個(gè)后臺(tái)線程并指派任務(wù)。數(shù)據(jù)的刷新是一個(gè)不斷執(zhí)行的后臺(tái)任務(wù),在dataFileSync.run()里面可以找到刷數(shù)據(jù)的相關(guān)代碼:

MongoDB數(shù)據(jù)緩存刷新機(jī)制是什么

voidrun()

{

Date_tstart=jsTime();

intnumFiles=MemoryMappedFile::flushAll(true);

time_flushing=(int)(jsTime()–start);

globalFlushCounters.flushed(time_flushing);

}

從這一段代碼看,MongoDB會(huì)在syncdelay設(shè)定的周期內(nèi),采取同步的形式刷新所有的臟數(shù)據(jù)。再看一下flushAll是怎么刷新所有數(shù)據(jù)的:

intMongoFile::flushAll(boolsync)

{

setseen;

while(true){

auto_ptrf;

{

rwlocklk(mmmutex,false);

for(set::iteratori=mmfiles.begin();i!=mmfiles.end();i++){

MongoFile*mmf=*i;

if(!mmf)

continue;

if(seen.count(mmf))

continue;

f.reset(mmf->prepareFlush());

seen.insert(mmf);

break;

}

}

if(!f.get())

break;

f->flush();

}

returnseen.size();

}

上面這一段代碼實(shí)現(xiàn)的功能很簡(jiǎn)單,就是把mmfiles中所有MongoFile指針?biāo)玫膶?duì)象都flush()一次。不過(guò)在執(zhí)行flush()函數(shù)之前,需要先執(zhí)行prepareFlush()確保這個(gè)對(duì)象是可以執(zhí)行flush()函數(shù)的。下面是最后真正執(zhí)行刷新操作的代碼:

voidMemoryMappedFile::flush(boolsync)

{

if(view==0||fd==0)

return;

if(msync(view,len,sync?MS_SYNC:MS_ASYNC))

problem()<<“msync”<   }   

關(guān)于MongoDB的初始化步驟有哪些以及其緩存刷新機(jī)制是什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

文章標(biāo)題:MongoDB的初始化步驟有哪些以及其緩存刷新機(jī)制是什么-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://muchs.cn/article26/eiocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、虛擬主機(jī)、品牌網(wǎng)站建設(shè)做網(wǎng)站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)