有人在Quora上提问:MongoDB数据文件内部的组织结构是什么样的。随后10gen的工程师Jared Rosoff出来做了简短的回答。

每一个数据库都有自己独立的文件。如果你开启了directoryperdb选项,那你每个库的文件会单独放在一个文件夹里。

数据库文件在内部会被切分成单个的块,每个块只保存一个名字空间的数据。在MongoDB中,名字空间用于区分不同的存储类别。比如每个collection有一个独立的名字空间,每个索引也有自己的名字空间。

在一个块中,会保存多条记录,每条记录是BSON格式的,记录与记录之间通过双向链表进行连接。

索引数据也存在数据文件中,不过索引是被组织成B Tree结构,而不是双向链表。

对每个数据库,有一个命名空间文件,用于保存每个名字空间对应的元数据。我们通过查询这些元数据来找到对应的名字空间的存储块位置。

如果你开启了jorunaling日志,那么还会有一些文件存储着你所有的操作记录。

下面图片摘自10gen工程师Mathias Stearn在MongoSV2011大会上的发言稿,手绘的数据文件结构。

1.每个数据库有相应的数据文件和命名空间文件

2.数据文件从16MB开始,新的数据文件比上一个文件大一倍,最大为2GB

3.文件使用MMAP进行内存映射,会将所有数据文件映射到内存中,但是只是虚拟内存,只有访问到这块数据时才会交换到物理内存。

4.MongoDB的数据文件映射到内存表中的位置

5.使用32位机器的话,内存地址最大可以标识4GB内存

6.但是在32位机器上,4GB内存会有1GB被内核战用,大约0.5GB会用于mongod进程的stack空间,只剩下大约2.5GB可用于映射数据文件。

7.在64位机器上则最多可以表示128TB的空间

8.每个数据文件会被分成一个一个的数据块,块与块之间用双向链表连接

9.在名字空间文件中,保存的是一个hash table,保存了每个名字空间的存储信息元数据,包括其大小,块数,第一块位置,最后一块位置,被删除的块的链表以及索引信息

10.这些位置通过DiskLoc数据结构进行存储,存储了数据文件编号和块在文件中的位置

11.对每一个块来说,其头部包含了一些块的元数据,比如自己的位置,上一个和下一个块的位置以及块中第一条和最后一条记录的位置指针。剩下的部分用于存储具体的数据,具体数据之间也是通过双向链接来进行连接。

12.下面是B Tree的存储结构和工作原理

anyShare据说看到好文章不转的人,服务器容易宕机!

文章转自:http://blog.nosqlfan.com/html/3515.html

MongoDB数据文件内部结构相关推荐

  1. MongoDB 数据文件损坏修复救命repair与致命危险

    最近,一客户单实例mongodb数据库,没有备份的情况下遇到了断电导致的数据文件损坏,由于客户业务需要 及数据的不敏感性,要求尽快恢复业务,使用了Mongdb的自动修复repair命令进行修复.可喜的 ...

  2. linux删除grid数据文件,MongoDB进阶系列(13)——GridFS大文件的添加、获取、查看、删除...

    GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种: 存储巨大的文件,比如视频.高清图片等. 利用GridFS可以简化需求. GridFS会直接利用已经建立的 ...

  3. 使用SpringBoot+MongoDB数据导出为Excel文件

    MongoDB数据导出为Excel文件 注: 本文使用的是POI导出文件 导出数据两种创建工作簿的方式 // 创建工作簿 XSSFWorkbook wb = new XSSFWorkbook(); / ...

  4. Python数据分析之Pandas读写外部数据文件

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 阅读目录 1 引言 2 文本文件(txt.csv) 2.1 读取数据 2.2 写入数据 ...

  5. rsync+sersync实现数据文件实时同步

    rsync+sersync实现数据文件实时同步 使用rsync+sersync,实现nfs与backup服务器间实时数据同步 一.数据同步工具介绍 rsync是一款开源的.快速的.多功能的.可实现全量 ...

  6. mongodb数据文件结构——record是内嵌BSON的双向链表,多个record或索引组成extent...

    数据文件结构 Extent 在每一个数据文件内,MongoDB把所存储的BSON文档的数据和B树索引组织到逻辑容器"Extent"里面.如下图所示(my-db.1和my-db.2 ...

  7. python读取数据文件-python多种读写excel等数据文件的方式(收藏篇)

    前言: python处理数据文件的途径有很多种,可以操作的文件类型主要包括文本文件(csv.txt.json等).excel文件.数据库文件.api等其他数据文件.下面小编整理下python到底有哪些 ...

  8. Linux中如何恢复被误删的数据文件

    Linux环境中文件被删除的恢复,通常有几种情况,如果数据库实例还未停止,那么恢复很easy,如果实例停掉, 那么可能需要借助相关的工具来进行恢复,这里我进行简单的描述. 1. 使用工具进行恢复(ex ...

  9. python里读写excel等数据文件的6种常用方式

    下面整理下python有哪些方式可以读取数据文件. 1. python内置方法(read.readline.readlines) read() : 一次性读取整个文件内容.推荐使用read(size) ...

  10. python读excel 包含格式_python里读写excel等数据文件的几种常用方式

    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python ...

最新文章

  1. Octavia health-manager 与 amphora 故障修复的实现与分析
  2. linux添加固件到内核,树莓派4 BCM43455 NVRAM添加到Linux固件Git
  3. git服务器(gitea)安装说明
  4. 数据挖掘流程(六):写报告
  5. 读书笔记_代码大全2第十一章_选择好的变量名
  6. html中擦窗效果,纯CSS写的小雨打在窗户上效果
  7. vue项目打包部署到Tomcat上,一刷新就报错404
  8. Windows、Linux以及银河麒麟系统的一些操作系统知识
  9. 项目经理的文档提升能力
  10. 移动游戏防作弊攻防战
  11. 云网融合驱动数据中心技术聚变
  12. zookeeper 启动失败,报错 “ZooKeeper JMX enabled by default”
  13. 建立桌面文件管理格子_让你的电脑桌面井井有条,3款桌面整理工具推荐
  14. PLC模拟量输入的软件滤波使用方法
  15. 学习笔记:MAC协议 5GNR
  16. python27读书笔记0.1
  17. linux 查看网络
  18. xaut 循环结构习题 公式求兀值
  19. 领导管理团队的3个正确方法
  20. 一小时刷完英语口语常用3000词汇(绿色护眼版)day8-词汇701-800

热门文章

  1. 衔着树枝飞跃太平洋的傻鸟!(童话版)
  2. 物理内存管理之zone详解
  3. FRR BGP协议分析8 -- BGP 层3隧道 (2)
  4. FFmpeg编解码常用函数ffmpeg av_parser_parse2()函数
  5. 使用FreeSWITCH SIP落地的配置总结
  6. 1005 Spell It Right (20)(20 分)
  7. linux所有内存监控,流量监控?负载监控?内存监控?IO监控?check_linux_stats全部替你搞定!...
  8. 面向对象6:构造器、JavaBean、UML图、this的使用
  9. html5旋转木马效果,js实现旋转木马效果
  10. android:src app:srccompat,android – 数据绑定与srcCompat