MongoDB日志是如何工作的
admin
2023-04-13 17:21:38
0

Good idea, Patrick!

那么, MongoDB日志是如何工作的呢?

我们用下图表示硬盘上的数据文件和日志文件:

MongoDB日志是如何工作的

当你使用mongod启动MongoDB的时候,数据文件将被加载到共享视图。基本上,操作系统说:“OK,你的数据占用2,000bytes的磁盘空间,我将加载他们到内存地址为1,000,000-1,002,000.所以,如果你读内存地址为1,000,042,你就可以获取这个文件的第42个byte的数据。”(其实,除非你真的存取这些内存地址,否则这些数据没必要加载)

MongoDB日志是如何工作的

这段内存仍然被这个数据文件占有:如果你在这段内存中做修改,操作系统将刷新这个文件,修改数据。这就是mongod不开启日志的工作方式:进程每60秒通知操作系统对这段内存做flush操作。

然而,启用日志,mongod会建立另一个内存映射用作私有视图。这就是为什么需要分配两倍于mongod所占内存的内存量给日志操作的原因。

MongoDB日志是如何工作的

需要注意的是私有视图不直接关联到数据文件,所用操作系统不能通过刷新私有视图来写数据到磁盘。

现在,当你有一个写操作,mongod进程就把这个操作写到私有视图。

MongoDB日志是如何工作的

mongod进程会把这个操作写到日志文件,并描述哪个文件的哪个字节有修改。

MongoDB日志是如何工作的

日志记录每一个修改操作。

MongoDB日志是如何工作的

这个时候,写操作是安全的。如果mongod进程崩溃,日志可以重现此次修改,即使还没有对数据文件做更新操作。

MongoDB日志是如何工作的

然后,mongod进程重新将共享视图映射到私有视图,这样可以防止私有视图过于“dirty”(相对于映射过来的共享视图有太多的修改)。

MongoDB日志是如何工作的

最后,经过一系列漫长的验证,共享视图数据将会被刷新到磁盘。默认情况下,mongod每60秒对OS请求一次刷新操作。

And that’s how journaling works. Thanks to Richard, who gave the best explanation of this I’ve heard (Richard is going to be teaching an online course on MongoDB this fall, if you’re interested in more wisdom from the source).

相关内容

热门资讯

玩家攻略科普“皮皮衡阳字牌怎么... 玩家攻略科普“皮皮衡阳字牌怎么装挂?”(原来真的有挂)您好,皮皮衡阳字牌这个游戏其实有挂的,确实是有...
重磅消息“九酷众娱牛牛真的有挂... 网上科普关于“九酷众娱牛牛有没有挂”话题很是火热,小编也是针对九酷众娱牛牛作*弊开挂的方法以及开挂对...
终于懂了“WePoker怎么装... 有 亲,根据资深记者爆料WePoker是可以开挂的,确实有挂(咨询软件无...
【第一资讯】“九九麻将究竟有挂... 网上科普关于“九九麻将有没有挂”话题很是火热,小编也是针对九九麻将作*弊开挂的方法以及开挂对应的知识...
今日重大通报“新全游到底是不是... 网上科普关于“新全游有没有挂”话题很是火热,小编也是针对新全游作*弊开挂的方法以及开挂对应的知识点,...
最新引进“同城游熟人麻将开挂神... 您好:同城游熟人麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这...
【今日要闻】“728到底有挂吗... 【今日要闻】“728到底有挂吗?”(太坑了果然有挂)您好,728这个游戏其实有挂的,确实是有挂的,需...
玩家分享攻略“瓜瓜丰城棋牌真的... 家人们!今天小编来为大家解答瓜瓜丰城棋牌透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里...
重磅消息“功夫熊猫金花到底有挂... 网上科普关于“功夫熊猫金花有没有挂”话题很是火热,小编也是针对功夫熊猫金花作*弊开挂的方法以及开挂对...
玩家分享攻略“极速官方游戏到底... 网上科普关于“极速官方游戏有没有挂”话题很是火热,小编也是针对极速官方游戏作*弊开挂的方法以及开挂对...