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

  在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数据。下图说明了名称空间文件与数据文件之间的关系。

  • Extent

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

  • Record

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

  视频讲解如下:

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

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

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

powershell 复制代码
mkdir -p /data/mmapv1

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

powershell 复制代码
dbpath=/data/mmapv1/
port=27018
fork=true
logpath=/data/mmapv1/mmapv1.log
storageEngine=mmapv1

(3)启动MongoDB服务器端。

powershell 复制代码
mongod --config /data/mmapv1/mmapv1.conf

(4)使用mongoshell连接MongoDB。

powershell 复制代码
mongo --port 27018

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

powershell 复制代码
> use mmapv1
> db.test1.insert({name:'Tom',age:18});

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

powershell 复制代码
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
相关推荐
这个DBA有点耶4 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB5 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB5 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB5 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
这个DBA有点耶7 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768910 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!11 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网11 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿11 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构