MongoDB的初始化步骤有哪些以及其缓存刷新机制是什么-创新互联

MongoDB的初始化步骤有哪些以及其缓存刷新机制是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及成都加固等,在成都网站建设成都全网营销推广、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。

当内存用尽开始往磁盘上刷脏页的时候,性能有非常大的波动,即使调整了syncdelay也没有太大改善。在测试中还出现了一个莫名其妙的情况:MongoDB会间歇性地释放文件系统的cache。下面创新互联网站建设公司,小编来讲解下MongoDB的初始化步骤有哪些?MongoDB数据缓存刷新机制是什么?

MongoDB的初始化步骤有哪些

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

{

Module::configAll(params);

dataFileSync.go();

initAndListen(cmdLine.port,appsrvPath);

}

显然,dataFileSync就是我们感兴趣的那个类。dataFileSync类派生自BackgroundJob类,而BackgroundJob主要的功能就是生成一个后台线程并指派任务。数据的刷新是一个不断执行的后台任务,在dataFileSync.run()里面可以找到刷数据的相关代码:

MongoDB数据缓存刷新机制是什么

voidrun()

{

Date_tstart=jsTime();

intnumFiles=MemoryMappedFile::flushAll(true);

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

globalFlushCounters.flushed(time_flushing);

}

从这一段代码看,MongoDB会在syncdelay设定的周期内,采取同步的形式刷新所有的脏数据。再看一下flushAll是怎么刷新所有数据的:

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();

}

上面这一段代码实现的功能很简单,就是把mmfiles中所有MongoFile指针所引用的对象都flush()一次。不过在执行flush()函数之前,需要先执行prepareFlush()确保这个对象是可以执行flush()函数的。下面是最后真正执行刷新操作的代码:

voidMemoryMappedFile::flush(boolsync)

{

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

return;

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

problem()<<“msync”<   }   

关于MongoDB的初始化步骤有哪些以及其缓存刷新机制是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


标题名称:MongoDB的初始化步骤有哪些以及其缓存刷新机制是什么-创新互联
分享路径:http://scyanting.com/article/eiocg.html