mongodb 中的内存映射是什么?
What is memory map in mongodb?
我在
上读到了这个话题
http://docs.mongodb.org/manual/faq/storage/#faq-storage-memory-mapped-files
但是没看懂点。它是用来在物理内存中保存查询数据的吗?它与虚拟内存有何关系?为什么它很重要以及它如何影响性能?
我会尽量用简单的方式解释。
MongoDB(和其他存储系统)将数据存储在文件中。每个数据库都有自己的文件,根据需要创建。第一个文件大小为 64 MB,接下来的文件大小为 128 MB,依此类推最大为 2 GB。然后,创建的新文件重达 2 GB。这些文件中的每一个在逻辑上被分成不同的块,对应于一个虚拟内存块。
当MongoDB需要访问一个文件或文件的一部分时,使用mmap.On将与该文件对应的所有虚拟块或文件的一部分加载到内存中,另一方面,mmap是一个应用程序 利用系统缓存的方式 (linux).
所以当你进行查询时真正发生的是 MongoDB "tells" OS 用请求的数据加载它需要的部分,所以下一次请求会更快。正如您想象的那样,这是一个非常重要的功能,可以提高 MongoDB 等数据库的性能,因为访问 RAM 比硬盘驱动器快得多。
使用 mmap 的另一个好处是 MongoDB 内存会根据需要增长,系统内存是免费的。
我在
上读到了这个话题http://docs.mongodb.org/manual/faq/storage/#faq-storage-memory-mapped-files
但是没看懂点。它是用来在物理内存中保存查询数据的吗?它与虚拟内存有何关系?为什么它很重要以及它如何影响性能?
我会尽量用简单的方式解释。
MongoDB(和其他存储系统)将数据存储在文件中。每个数据库都有自己的文件,根据需要创建。第一个文件大小为 64 MB,接下来的文件大小为 128 MB,依此类推最大为 2 GB。然后,创建的新文件重达 2 GB。这些文件中的每一个在逻辑上被分成不同的块,对应于一个虚拟内存块。
当MongoDB需要访问一个文件或文件的一部分时,使用mmap.On将与该文件对应的所有虚拟块或文件的一部分加载到内存中,另一方面,mmap是一个应用程序 利用系统缓存的方式 (linux).
所以当你进行查询时真正发生的是 MongoDB "tells" OS 用请求的数据加载它需要的部分,所以下一次请求会更快。正如您想象的那样,这是一个非常重要的功能,可以提高 MongoDB 等数据库的性能,因为访问 RAM 比硬盘驱动器快得多。
使用 mmap 的另一个好处是 MongoDB 内存会根据需要增长,系统内存是免费的。