MongoDB的初始化步驟有哪些以及其緩存刷新機(jī)制是什么,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、市南ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的市南網(wǎng)站制作公司
當(dāng)內(nèi)存用盡開始往磁盤上刷臟頁的時(shí)候,性能有非常大的波動(dòng),即使調(diào)整了syncdelay也沒有太大改善。在測(cè)試中還出現(xiàn)了一個(gè)莫名其妙的情況:MongoDB會(huì)間歇性地釋放文件系統(tǒng)的cache。下面創(chuàng)新互聯(lián)小編來講解下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類,而BackgroundJob主要的功能就是生成一個(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()一次。不過在執(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ī)制是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。