1、什么是内存映射文件(memory mapped files)?
内存映射文件是操作系统通过调用函数mmap()创建的一个放在内存中的一个数据文件。这种文件可以当做一个从零开始的内存或者数组,你可以将内容放在任意位置。内存映射文件是mongodb存储引擎中的一个很重要组成部分。通过使用这种文件,mongodb可以将数据文件当内存一样任意分配和使用。同时又可以以一种极其简单的访问方式和极快的速度访问和操作数据。
2、内存映射文件的原理是什么?
内存映射文件会将一个文件映射到内存,使mongodb以访问内存的方式访问文件(无需经过操作系统的缓存,性能高)。
3、Mongodb是如何使用内存映射文件的?
mongodb使用内存映射文件管理所有的数据。Mongodb需要访问对象的时候就将相应的文件映射到内存,不需要访问的对象,不映射到内存。
4、什么是页面错误(page faults)?
当你访问的一个内存映射文件时不在内存时,将会产生页面错误。如果操作系统还有空闲内存,操作系统将直接将文件加载到内存。当系统没有空闲内存时,操作系统将:step1,从内存中找一个陈旧的或者不再需要的页面,将此页面写入到磁盘。Step2,读取请求的内存页面并加载到内存。这个操作过程,特别是在服务正在运行时,跟直接从内存读取一个页面相比,所耗费的时间是相当大的。
5、“软”页面错误和“硬”页面错误有何不同?
当操作系统从硬盘上读取内存页面是,页面错误为“硬”页面错误,当操作系统从系统缓存区读取内存页面时,此时只是将内存页面从一个页面地址读取到另一个内存页面上,被称作“软”页面错误。在生产环境,很少碰到“软”页面错误。
6、有什么工具可以了解mongodb的数据文件使用情况?
可以在mongo shell中运行db.stats()命令查看。
7、什么是工作集(working set)?
工作集代表应用程序(mongo)一次正常的操作所使用的所有数据。通常,这些数据只是数据库中的一部分数据,具体是多大的数据,取决于该操作所发生时间时的数据库中的数据。