mongodb與mysql不同,mysql的每一次更新操作都會(huì)直接寫入硬盤,但是mongo不會(huì),做為內(nèi)存型數(shù)據(jù)庫,數(shù)據(jù)操作會(huì)先寫入內(nèi)存,然后再會(huì)持久化到硬盤中去,那么mongo是如何持久化的呢
mongodb在啟動(dòng)時(shí),專門初始化一個(gè)線程不斷循環(huán)(除非應(yīng)用crash掉),用于在一定時(shí)間周期內(nèi)來從defer隊(duì)列中獲取要持久化的數(shù)據(jù)并寫入到磁盤的journal(日志)和mongofile(數(shù)據(jù))處,當(dāng)然因?yàn)樗皇窃谟脩籼砑佑涗洉r(shí)就寫到磁盤上,所以按mongodb開發(fā)者說,它不會(huì)造成性能上的損耗,因?yàn)榭催^代碼發(fā)現(xiàn),當(dāng)進(jìn)行CUD操作時(shí),記錄(Record類型)都被放入到defer隊(duì)列中以供延時(shí)批量(groupcommit)提交寫入,但相信其中時(shí)間周期參數(shù)是個(gè)要認(rèn)真考量的參數(shù),系統(tǒng)為90毫秒,如果該值更低的話,可能會(huì)造成頻繁磁盤操作,過高又會(huì)造成系統(tǒng)宕機(jī)時(shí)數(shù)據(jù)丟失過。