暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【赵渝强老师】MongoDB的MMAPv1存储引擎

原创 赵渝强老师 2025-11-01
93

1.png
​在MongoDB 3.2版本以前,MongoDB使用MMAPv1作为默认的存储引擎。在MMAPv1的存储引擎中,包含以下的组成部分:

  • Database

每个Database由一个.ns名称空间文件及若干个数据文件组成。数据文件从0开始编号,依次为.0、.1、.2等。数据文件大小从64MB起,依次倍增,最大为2GB。

  • Namespace

每个Database可以包含多个Namespace名称空间文件,该名称空间对应MongoDB中的集合,名称空间文件文件实际上是一个Hash表,可用于快速定位某个集合的起始位置

  • 数据文件

每个数据文件被划分成多个extent,每个extent只包含一个名称空间的数据。同一个名称空间的所有extent之间以双向链表形式组织。名称空间的元数据里包含指向第一个及最后一个extent的位置指针,通过这些信息,就可以遍历一个名称空间下的所有extent数据。下图说明了名称空间文件与数据文件之间的关系。
2.png

  • Extent

每个Extent包含多个Record,该Record对应MongoDB集合中的Document),同一个Extent下的所有Record以双向链表形式组织。

  • Record

每个Record对应mongodb里的一个文档。

aaa11.png
点击这里查看视频讲解:【赵渝强老师】MongoDB的MMAPv1存储引擎

下面通过一个简单的示例来演示MMAPv1存储引擎。

(1)创建目录用于保存MMAPv1存储引擎的数据。

mkdir -p /data/mmapv1

(2)编辑配置文件/data/mmapv1/mmapv1.conf,输入下面的内容。

dbpath=/data/mmapv1/ port=27018 fork=true logpath=/data/mmapv1/mmapv1.log storageEngine=mmapv1

(3)启动MongoDB服务器端。

mongod --config /data/mmapv1/mmapv1.conf

(4)使用mongoshell连接MongoDB。

mongo --port 27018

(5)在MongoDB中创建一个数据库和一张新的集合,并插入一条数据。

> use mmapv1 > db.test1.insert({name:'Tom',age:18});

(6)查看目录/data/mmapv1下的文件。

tree /data/mmapv1 输出的信息如下: /data/mmapv1 ├── admin.0 ├── admin.ns ├── diagnostic.data │ ├── metrics.2022-04-04T05-18-26Z-00000 │ └── metrics.interim ├── journal │ └── j._0 ├── local.0 ├── local.ns ├── mmapv1.0 ---> mmapv1数据库的第一个数据文件。 ├── mmapv1.conf ├── mmapv1.log ├── mmapv1.ns ---> 这是在第(5)步中创建的mmapv1数据库的名称空间文件。 ├── mongod.lock ├── storage.bson └── _tmp
最后修改时间:2025-12-14 12:05:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论