MongoDB · 特性分析 · MMAPv1 存储引擎原理

本文深入剖析了MongoDB的MMAPv1存储引擎,包括Database结构、Namespace组织、数据文件、Extent和Record管理。MongoDB的每个Database由.ns文件和数据文件组成,数据文件通过mmap映射到内存。Namespace使用hash表进行快速定位,数据文件被划分为多个extent,extent之间以链表组织,Record通过双向链表管理。删除和更新操作可能导致存储碎片,可通过compact操作进行整理。查询Record时,无索引则需遍历整个集合,索引能显著提升查询效率。
摘要由CSDN通过智能技术生成

MongoDB 的 mongod 服务管理一个数据目录,可包含多个DB,每个DB的数据单独组织,本文主要介绍 MMAPv1 存储引擎的数据组织方式。

Database

每个 Database(DB) 由一个.ns文件及若干个数据文件组成

数据文件从0开始编号,依次为mydb.0、mydb.1、mydb.2等,文件大小从64MB起,依次倍增,最大为2GB。

Namespace

每个 DB 包含多个 namespace(对应 mongodb 的 collection 名),mydb.ns实际上是一个hash表(采用线性探测方式解决冲突),用于快速定位某个 namespace 的起始位置。

hash表里的一个节点包含的元数据结构如下,每个节点大小为 628Bytes,16M 的 NS 文件最多可存储26715个 namespace。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农老K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值