`
san_yun
  • 浏览: 2662197 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

mongoDB的储存机制

 
阅读更多

在MongoDB的数据文件夹中(默认路径是/data/db)由构成数据库的所有文件。每一个数据库都包含一个.ns文件和一些数据文件,其中数 据文件会随着数据量的增加而变多。所以如果有一个数据库名字叫做foo,那么构成foo这个数据库的文件就会由 foo.ns,foo.0,foo.1,foo.2等等组成。

数据文件每新增一次,大小都会是上一个数据文件的2倍,每个数据文件最大2G。这样的设计有利于防止数据量较小的数据库浪费过多的空间,同时又能保证数据量较大的数据库有相应的空间使用。

MongoDB 会使用预分配方式来保证写入性能的稳定(这种方式可以使用--noprealloc关闭)。预分配在后台进行,并且每个预分配的文件都用0进行填充。这会 让MongoDB始终保持额外的空间和空余的数据文件,从而避免了数据增长过快而带来的分配磁盘空间引起的阻塞。

名字空间和盘区

每一个数据库都由多个名字空间组成,每一个名字空间存储了相应类型的数据。数据库中的每一个Collection都有各自对应的名字空间,索引文件同样也有名字空间。所有名字空间的元数据都存储在.ns文件中。

名字空间中的数据在磁盘中分为多个区间,这个叫做盘区。在下图中,foo这个数据库包含3个数据文件,第三个数据文件属于空的预分配文件。头两个数据文件被分为了相应的盘区对应不同的名字空间。

aaa

上 图显示了名字空间和盘区的相关特点。每一个名字空间可以包含多个不同的盘区,这些盘区并不是连续的。与数据文件的增长相同,每一个名字空间对应的盘区大小 的也是随着分配的次数不断增长的。这样做的目的是为了平衡名字空间浪费的空间与保持某一个名字空间中数据的连续性。上图中还有一个需要注意的名字空 间:$freelist,这个名字空间用于记录不再使用的盘区(被删除的Collection或索引)。每当名字空间需要分配新的盘区的时候,都会先查 看$freelist是否有大小合适的盘区可以使用。

内存映射存储引擎

MongoDB目前支持的存储引擎为内存映射引擎。当MongoDB启动的时候,会将所有的数据文件映射到内存中,然后操作系统会托管所有的磁盘操作。这种存储引擎有以下几种特点:

* MongoDB中关于内存管理的代码非常精简,毕竟相关的工作已经有操作系统进行托管。
* MongoDB服务器使用的虚拟内存将非常巨大,并将超过整个数据文件的大小。不用担心,操作系统会去处理这一切。
* MongoDB无法控制数据写入磁盘的顺序,这样将导致MongoDB无法实现writeahead日志的特性。所以,如果MongoDB希望提供一种durability的特性(这一特性可以参考我写的关于Cassandra文章:http://www.cnblogs.com/gpcuster/tag/Cassandra/ ),需要实现另外一种存储引擎。
* 32位系统的MongoDB服务器每一个Mongod实例只能使用2G的数据文件。这是由于地址指针只能支持32位。

其他

在《MongoDB The Definitive Guide》中介绍的MongoDB内部构造只有这么多,如果真要把它说清楚,可能需要另外一本书来专门讲述了。比如内部的JS解析,查询的优化,索引的建立等等。有兴趣的朋友可以直接参考源代码:)

分享到:
评论

相关推荐

    mongoDB文件存储_java_MongoDB_

    在处理大文件时,GridFS的优势在于其分块存储机制,确保了即使在大文件情况下也能保持良好的性能。同时,由于MongoDB的分布式特性,GridFS还支持高可用性和水平扩展,能够处理大量并发的读写操作。 在实际应用中,...

    深入了解MongoDB是如何存储数据的

    本文主要介绍了关于MongoDB存储数据的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 想要深入了解MongoDB如何存储数据之前,有一个概念必须清楚,那就是Memeory-Mapped Files。 Memeory-Mapped ...

    Mongodb存储特性与内部原理

    MongoDB 是一种基于分布式文件存储的开源 NoSQL 数据库系统,其设计支持高性能、高可用性和易扩展的特性。它通过灵活的数据模型来适应不断变化的应用需求,并被广泛应用于大数据和实时Web应用领域。接下来,我将详细...

    基于MongoDB的分布式地质灾害数据存储策略.pdf

    MongoDB作为NoSQL数据库,其非结构化和灵活的数据存储方式,以及高效的存储和读取特性,非常适合用于存储和管理大量的地质灾害数据。通过自动分片和分布式部署,为海量地质灾害数据的存储和管理提供了解决思路。 ##...

    Vue+axios+Spring Boot+mongoDB 基于Mongo图片存储和基于GridFS的文件存储.zip

    GridFS是一种将大型文件分割成小块存储在MongoDB集合中的机制,这样可以方便地进行上传、下载和查询操作。每个文件被拆分为多个“chunks”,每个chunk都有自己的文档,确保了文件的完整性和可靠性。 在本项目中,...

    MongoDB入门指南.pdf

    MongoDB的原子性和事务机制可以确保数据的一致性。 MongoDB的应用场景包括: 1.大数据处理:MongoDB可以处理大量的数据,可以用于大数据处理和分析。 2.实时数据处理:MongoDB可以实时地处理数据,可以用于实时...

    mongodb c#驱动最新驱动mongodb.driver.dll 版本2.12.0-beta1

    MongoDB.Bson.dll 文件是 Bson(Binary JSON)的实现,Bson 是一种二进制形式的 JSON,它提供了更高效的数据序列化和反序列化机制,是 MongoDB 内部数据交换的主要格式。 mongodb.driver.core.dll 是驱动的核心组件...

    MongoDB环境下GML云存储构建

    5. **GridFS**:针对存储大文件或大量文件,MongoDB提供了GridFS机制。GML数据往往包含大量的地理空间数据和图像,可以利用GridFS来存储这类大对象。 6. **核心模式和应用模式存储**:在云存储架构中,通常会有核心...

    MongoDB存储服务方案设计.doc

    MongoDB存储服务方案设计主要关注...这个方案全面考虑了客车和货运平台的实际业务需求,通过MongoDB的强大功能,提供了高效的数据存储和处理机制,同时注重系统的扩展性和稳定性,为平台的长期发展奠定了坚实的基础。

    MongoDB4.2.6资源下载

    MongoDB是一款基于分布式文件存储的开源文档数据库系统,它以其高性能、高可用性、易扩展性和丰富的文档模型而备受青睐。在4.2版本中,MongoDB引入了一些重要的改进和新特性,为开发者提供了更多功能和优化。 1. **...

    mongodb4.4.6安装包

    1. **新功能增强**:MongoDB 4.4引入了多项新功能,如聚合框架的性能提升、新的数据类型支持、改进的备份与恢复机制等。 2. **存储引擎优化**:此版本可能进一步优化了默认的WiredTiger存储引擎,提供更好的读写性能...

    Scaling MongoDB.pdf

    本书涵盖了从理论到实践的各个方面,为读者提供了深入理解MongoDB扩展机制的基础。 **什么是Sharding(分片)?** Sharding是一种数据库扩展技术,用于将数据分散存储在多个物理服务器上。通过这种方式,可以提高...

    MongoDB最新版3.4.10

    MongoDB是一款开源、分布式、高性能的文档型数据库,它基于分布式文件存储,广泛应用于Web应用程序、内容管理系统、社交网络分析、大数据存储等多个领域。MongoDB 3.4.10是该数据库系统的一个稳定版本,提供了诸多...

    mongodb高可用所需yaml

    综上所述,Kubernetes内的MongoDB高可用部署涉及多个层面,包括Kubernetes的组件使用、数据库的高可用机制、存储的持久化、服务的定义以及资源的管理和监控。通过精心设计的YAML文件,我们可以构建出一个健壮、弹性...

    mongodb3.2.4说明文档

    与传统的表格型数据存储方式不同,MongoDB 中的数据是以 BSON(Binary JSON)格式存储的文档,这些文档类似于 JSON 对象,便于存储复杂的数据类型。文档存储的特点使得 MongoDB 在处理半结构化或非结构化数据时表现...

    浅析MongoDB-PPT

    4. **文件存储**:MongoDB的GridFS机制支持存储大型文件,提供了简便的文件存储和访问协议。 MongoDB为了保持高速度,采用MongoDB传输协议与服务器交互,该协议基于TCP/IP并在其上进行了简单的封装,减少了不必要的...

    demo-mongodb.zip

    这种分片(sharding)机制使得MongoDB能够处理大数据量。 4. **复制集**:MongoDB的复制集功能可以创建数据的副本,提高数据可用性和容错性。主节点负责写操作,其他从节点同步主节点的数据,确保在主节点故障时能...

    MongoDB3.2

    4. **安全增强**:MongoDB 3.2加强了身份验证和访问控制,增加了SCRAM-SHA-256认证机制,提供了更安全的连接方式。 5. **写入操作优化**:引入了`bulkWrite` API,允许批量执行插入、更新和删除操作,提高了数据...

Global site tag (gtag.js) - Google Analytics