Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么MongoDB';s内存映射文件会导致像top这样的程序显示比正常情况更大的数字?_Linux_Mongodb_Memory Mapped Files_Nosql - Fatal编程技术网

Linux 为什么MongoDB';s内存映射文件会导致像top这样的程序显示比正常情况更大的数字?

Linux 为什么MongoDB';s内存映射文件会导致像top这样的程序显示比正常情况更大的数字?,linux,mongodb,memory-mapped-files,nosql,Linux,Mongodb,Memory Mapped Files,Nosql,我正试图了解mongodb的内部结构,我一直在阅读这篇文章 为什么会发生这种情况?内存映射文件的工作方式是,内存中的地址与磁盘上的文件逐字节映射。这使得它非常快,但是非常大。想象一下,磁盘上的一个文件占用了那么大的内存 为什么这么棒 实际上,这是因为直接从内存中写入和读取而不是发出系统调用(思考上下文切换)速度很快。此外,在实践中,这个巨大的内存映射块不适合您的物理ram这一事实是可以接受的。为什么?您只需要将工作数据集放入ram中,因为未使用的页面没有加载,只是保存在磁盘上。如果需要它们,则

我正试图了解mongodb的内部结构,我一直在阅读这篇文章


为什么会发生这种情况?

内存映射文件的工作方式是,内存中的地址与磁盘上的文件逐字节映射。这使得它非常快,但是非常大。想象一下,磁盘上的一个文件占用了那么大的内存

为什么这么棒

实际上,这是因为直接从内存中写入和读取而不是发出系统调用(思考上下文切换)速度很快。此外,在实践中,这个巨大的内存映射块不适合您的物理ram这一事实是可以接受的。为什么?您只需要将工作数据集放入ram中,因为未使用的页面没有加载,只是保存在磁盘上。如果需要它们,则会发生页面错误并加载。(我认为已加载的部分称为驻留内存)

为什么它有点糟糕

映射到内存中的文件需要页面对齐,因此如果不完全使用页面边界上的内存空间,则会浪费空间(小折衷)

摘要(tldnr)


它可能看起来占用了很多资源,因为它将整个数据映射到内存地址,但这并不重要,因为这些数据实际上并不是全部保存在RAM中。Mongo将根据需要提取数据,并有效地使用内存来维护性能工作集。

因此,内存映射文件的工作方式是,内存中的地址与磁盘上的文件逐字节映射。这使得它非常快,但是非常大。想象一下,磁盘上的一个文件占用了那么大的内存

为什么这么棒

实际上,这是因为直接从内存中写入和读取而不是发出系统调用(思考上下文切换)速度很快。此外,在实践中,这个巨大的内存映射块不适合您的物理ram这一事实是可以接受的。为什么?您只需要将工作数据集放入ram中,因为未使用的页面没有加载,只是保存在磁盘上。如果需要它们,则会发生页面错误并加载。(我认为已加载的部分称为驻留内存)

为什么它有点糟糕

映射到内存中的文件需要页面对齐,因此如果不完全使用页面边界上的内存空间,则会浪费空间(小折衷)

摘要(tldnr)

它可能看起来占用了很多资源,因为它将整个数据映射到内存地址,但这并不重要,因为这些数据实际上并不是全部保存在RAM中。Mongo将根据需要提取数据,并有效地使用内存来维护性能良好的工作集