MongoDB的存储引擎

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
日志服务 SLS,月写入数据量 50GB 1个月
简介: MongoDB是一个面向文档的NoSQL数据库,其存储原理在不同的存储引擎下可能会有所不同。MongoDB的两个主要存储引擎是MMAPv1(已弃用)和WiredTiger。

MongoDB是一个面向文档的NoSQL数据库,其存储原理在不同的存储引擎下可能会有所不同。MongoDB的两个主要存储引擎是MMAPv1(已弃用)和WiredTiger。

以下是对这两个存储引擎的存储原理的简要说明:

  1. MMAPv1 存储引擎(已弃用): MMAPv1引擎使用了内存映射文件(MMAP)的概念,通过将磁盘文件映射到进程的虚拟内存空间,直接在内存中访问文件内容,而不需要进行显式的I/O操作。这个引擎已经在MongoDB 4.0版本中被弃用,不再建议使用。
  • 文件结构:数据存储在数据文件(.ns和.0文件)中,索引存储在.ns和.bson文件中。.ns文件包含了命名空间(namespace)信息,其中记录了集合的元数据,如集合名称、索引信息等。.0文件包含了实际的文档数据。
  • 内存映射:MongoDB使用内存映射文件的方式将数据文件和索引文件映射到内存中。读取数据时,MongoDB直接从内存中访问数据,写入数据时,操作会被追加到日志文件中,然后由操作系统的内存管理机制处理数据的持久化。

MongoDB使用了MMAP(Memory-Mapped Files)作为其默认存储引擎,这意味着它利用了操作系统的内存映射文件机制来管理数据存储。MMAP允许MongoDB将文件直接映射到其地址空间,从而可以直接通过内存访问文件内容,而无需进行显式的读写操作。让我们深入了解MongoDB的MMAP底层原理:

  1. 内存映射文件(MMAP): 内存映射文件是操作系统提供的一种机制,它将文件的内容映射到进程的虚拟内存地址空间中。这样做的好处是,MongoDB可以像访问内存一样直接访问磁盘上的数据,而无需进行繁琐的读写操作。操作系统负责将数据从磁盘读取到内存中,并在必要时将数据刷新回磁盘。
  2. 数据文件和日志文件: 在MongoDB中,数据存储在数据文件和日志文件中。数据文件存储实际的文档数据,而日志文件用于持久化写操作,以便在故障恢复时重新应用这些操作。
  3. 存储引擎结构: MMAP存储引擎包含以下几个核心组件:
  • 文件句柄(file handle):MongoDB使用文件句柄打开数据文件和日志文件。
  • 内存映射区域(memory-mapped regions):文件通过内存映射区域映射到进程的虚拟内存空间。
  • 内存映射区域管理器(mmapv1 memory map manager):这是MongoDB的组件之一,用于管理内存映射区域。它负责将数据从磁盘加载到内存,并在需要时将数据刷新回磁盘。
  • 数据视图(data view):MongoDB使用数据视图来处理对数据文件的读写操作。
  1. 读取数据: 当MongoDB需要读取数据时,它会通过内存映射区域将数据文件的特定部分映射到内存中。一旦数据被映射到内存,MongoDB可以直接访问它,就像在内存中读取数据一样快速。
  2. 写入数据: 写入数据时,MongoDB首先将写入操作追加到日志文件中,这称为Write-Ahead Logging(WAL)策略。然后,操作系统会异步地将日志数据刷新到磁盘中。同时,数据文件保持不变,直到被操作系统的内存管理机制所处理。
  3. 数据同步和持久化: MongoDB使用操作系统的缓存来管理数据的读取和写入。对于写入操作,如果设置了writeConcern选项,MongoDB将确保写入被持久化到磁盘中,然后返回成功响应。这样可以确保即使在发生故障的情况下,数据的写入也不会丢失。

需要注意的是,自MongoDB 3.0版本起,MMAP存储引擎被推荐为仅供测试使用,并且默认存储引擎改为了WiredTiger。WiredTiger提供了更好的性能、复制和压缩等功能。以上是MongoDB MMAP存储引擎的简要底层原理,如果你正在考虑使用MongoDB,请考虑使用较新的存储引擎,如WiredTiger。

  1. WiredTiger 存储引擎: 自MongoDB 3.0版本起,默认的存储引擎变更为WiredTiger,它是一个现代化的、高性能的存储引擎。
  • 压缩技术:WiredTiger支持数据的压缩,通过压缩可以节省存储空间,提高数据读写的效率。
  • 多版本并发控制(MVCC):WiredTiger使用MVCC来支持多个并发事务。每个事务在读取数据时会创建一个快照,因此不会被其他事务的写操作干扰。
  • 数据文件结构:WiredTiger将数据存储在B树数据结构中,这使得查询和索引的效率都得到了优化。
  • Checkpoint:WiredTiger周期性地将内存中的数据刷新到磁盘上的数据文件,并创建检查点以保障数据的持久性和一致性。
  • 日志:WiredTiger使用Write-Ahead Logging(WAL)策略,将写操作先写入日志文件,然后再应用到数据文件,从而保证数据的安全性和持久性。

总的来说,MongoDB的存储原理涵盖了数据文件的组织、内存映射、索引结构、数据压缩、并发控制等多个方面,以提供高性能、可靠的数据存储和检索机制。WiredTiger引擎相对于MMAPv1引擎具有更好的性能、可扩展性和功能,因此它是推荐使用的存储引擎。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
19天前
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB的MMAPv1存储引擎
在MongoDB 3.2版本之前,默认使用MMAPv1存储引擎。MMAPv1包括Database、Namespace、数据文件、Extent和Record等组件。每个Database由名称空间文件和数据文件组成,数据文件按编号递增,大小从64MB到2GB。每个数据文件被划分为多个Extent,每个Extent包含多个Record,对应MongoDB中的文档。通过一个示例展示了如何配置和使用MMAPv1存储引擎。
|
19天前
|
存储 缓存 NoSQL
【赵渝强老师】MongoDB的WiredTiger存储引擎
MongoDB WiredTiger存储引擎自3.2版本起成为默认选择,提供文档级别的并发控制、检查点、数据压缩和本地加密等功能。本文详细介绍了WiredTiger的并发控制机制、预写日志与检查点、内存使用、数据压缩及磁盘空间回收等特性。
|
19天前
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB的In-Memory存储引擎
MongoDB的In-Memory存储引擎将数据存储在内存中,显著减少查询延迟,提高性能。该引擎不会将数据持久化到硬盘,仅在内存中存储,因此重启后数据会丢失。本文通过创建目录、配置文件、启动服务、插入数据和查询等步骤,详细演示了如何使用In-Memory存储引擎。
|
19天前
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB的存储引擎
存储引擎是MongoDB的核心组件,负责管理数据在硬盘和内存中的存储方式。从3.2版本起,MongoDB支持WiredTiger、MMAPv1和In-Memory三种存储引擎。WiredTiger为默认引擎,提供文档级并发控制和数据压缩;MMAPv1在3.2版本前为默认引擎,4.x版本后不再支持;In-Memory引擎将数据存储在内存中,减少查询延迟。
|
7月前
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 的存储引擎选择与优化
【5月更文挑战第11天】MongoDB 的存储引擎选择与优化至关重要,影响数据库性能、可靠性和可扩展性。常见引擎有默认的 WiredTiger(提供高性能读写、文档级并发控制和压缩)和较旧的 MMAPv1。选择引擎需考虑性能需求、数据规模、并发操作和压缩需求。WiredTiger 以其高性能和并发控制脱颖而出。优化策略包括配置参数、规划数据结构、监控性能和定期维护。案例显示,WiredTiger 对于并发访问频繁的电商平台尤为适合。未来,更高效、智能的存储引擎将应运而生,持续优化将是保持数据库系统竞争力的关键。
122 2
【MongoDB 专栏】MongoDB 的存储引擎选择与优化
|
6月前
|
存储 NoSQL 算法
MongoDB存储引擎发展及WiredTiger深入解析(二)
MongoDB存储引擎发展及WiredTiger深入解析(二)
|
存储 缓存 NoSQL
MongoDB 存储引擎
MongoDB 存储引擎
|
存储 缓存 NoSQL
【mongo 系列】mongodb 学习十二,MongoDB 存储引擎
上次我们说到了关于 mongodb 的集群,分为主从集群和分片集群,对于分片集群中的分片这里需要注意如下几点,一起来回顾一下
230 0