MongoDB是一个可移植的数据库,它在流行的每一个平台上都可以使用,即所谓的跨平台性,在不同的操作系统上虽然略有差别,但是从整体架构上来看,MongoDB在不同的平台上是一样的,如数据逻辑结构和数据存储等等。

一个运行着的MongoDB数据库就可以看成是一个MongoDB Server,该Server由实例和数据库组成,在一般情况下,一个MongoDB Server机器上包含一个实例或者多个与之对应的数据库,但是在特殊情况下,如硬件投入成本或者特殊的应用需求,也允许一个Server机器上可以有多 个实例或者多个数据库。

MongoDB中一系列物理文件(数据文件、日志文件等)的集合与之对应的逻辑结构(集合、文档等)被称之为数据库,简单的说,就是数据库是由一系列与磁盘有关系的物理文件的组成。

3.1、数据逻辑结构

很多人在学习MongoDB体系结构的时候会遇到各种各样的问题,我在这里给大家简
单的介绍下MongoDB体系结构之一的逻辑结构,MongoDB的逻辑结构是一种层次结构,主要由:文档(Document)、集合
(Collection)、数据库(database)这三部分组成,逻辑结构是面向用户的,用户使用MongoDB开发应用程序使用的就是逻辑结构。

  • MongoDB的文档(Document),相当于关系数据库中的一行记录。
  • 多个文档组成一个集合(Collection),相当于关系数据库的表。
  • 多个集合(Collection),扩及上组织在一起,就是数据库(database)。
  • 一个MongoDB实例支持多个数据库(database)。
文档(Document)、集合(Collection)、数据库(Database)的层次结构如下图:
对于习惯了关系型数据库的朋友们,我将MongoDB与关系型数据库的逻辑结构进行了对比,以便让大家更深刻的理解MongoDB的逻辑结构:
3.2、数据存储结构
MongoDB对国内用户来说比较新,它就像是一个黑盒子,但是如果对于它内部的数据存储了解多一些的话,那么就会很快的理解和驾驭MongoDB,让它发挥更大的作用。
MongoDB
的默认数据目录是/daba/db,它负责存储所有的MongoDB的数据文件,在MongoDB内部,每个数据库都包含一个.ns文件和一些数据文件,
而且这些文件会随着数据量的增加变的越来越多,所以如果系统中有一个叫做foo的数据库,那么构成foo这个数据库的文件就会由foo.ns、
foo.0、foo.1、foo.2等组成,具体如下:
MongoDB内部有预分配空间的机制,每个预分配的文件都用0进行填充,由于有了这个机制,MongoDB始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。
由于表中数据量的增加,数据文件每新分配一次,它的大小都会是上一个数据文件大小的2倍,每个数据文件最大2G,这样的机制有利于防止较小的数据库浪费过多的磁盘空间,同时又能保证较大的数据库有相应的预留空间使用。
数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间,这些命名空间的元数据集中在*.ns文件中。
在下图中。foo这个数据库包含3个文件用于存储表和索引数据,foo.2文件属于预分配的空文件,foo.0和foo.1这两个数据文件被分为了相应的盘区对应不同的名字空间。

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

mongo体系架构学习的更多相关文章

  1. MySQL体系架构

    MySQL体系架构 学习一门数据库系统首先得了解它的架构,明白它的架构原理对于后期的分析问题和性能调优都有很大的帮助,接下来就通过分析架构图来认识它. 数据库:物理操作系统文件或者其它文件的集合,在m ...

  2. 2020再见&新的计划(建立Android体系架构)

    2020,再见 关于2020,我心中有四个关键词: 疫情 年初突如其来的疫情,打破了原本生活的节奏,也没想到会笼罩全世界整整一年,希望这个世界早点好起来吧. 科比 初三的早晨,噩耗传来,我一度不敢相信 ...

  3. Netty学习-IO体系架构系统回顾 & 装饰模式Decorator的具体使用

    Netty学习-IO体系架构系统回顾 IO和NIO的学习 NIO - 1.4 开始出的 在网络应用框架中,NIO得到了大量的使用,特别是netty里面 前提:对IO及其了解 对IO的总结和回顾 理解J ...

  4. Oracle学习笔记—oracle体系架构及状态(nomount、mount和open)简介

    oracle体系架构简介 先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance ...

  5. 说说面向服务的体系架构SOA

    序言 在.Net的世界中,一提及SOA,大家想到的应该是Web Service,WCF,还有人或许也会在.NET MVC中的Web API上做上标记,然后泛泛其谈! 的确,微软的这些技术也确实推动着面 ...

  6. 、web前端的这么知识应该是怎样的一个知识体系架构?

    .web前端的这么知识应该是怎样的一个知识体系架构?之前我以为可以以W3C为纲要,把W3C的东西学会了就够了.后来发现我错了,W3C还不全面. 真正全面的覆盖了web前端知识体系的东西是——浏览器内核 ...

  7. 面向服务的体系架构SOA

    面向服务的体系架构SOA 序言 在.Net的世界中,一提及SOA,大家想到的应该是Web Service,WCF,还有人或许也会在.NET MVC中的Web API上做上标记,然后泛泛其谈! 的确,微 ...

  8. [转]OpenContrail 体系架构文档

    OpenContrail 体系架构文档 英文原文:http://opencontrail.org/opencontrail-architecture-documentation/ 翻译者:@KkBLu ...

  9. mongo源码学习(三)请求接收传输层

    在上一篇博客中(mongo源码学习(二)db.cpp之mongoDbMain方法分析),我们把db.cpp中的mongoDbMain的执行过程分析了一下,最后会调用initAndListen(serv ...

随机推荐

  1. Rsync实现文件同步的算法(转载)

    Rsync文件同步的核心算法 文章出处:http://coolshell.cn/articles/7425.html#more-7425 rsync是unix/linux下同步文件的一个高效算法,它能 ...

  2. Kafka 0.8 Producer处理逻辑

    Kafka Producer产生数据发送给Kafka Server,具体的分发逻辑及负载均衡逻辑,全部由producer维护. 1.Kafka Producer默认调用逻辑 1.1 默认Partiti ...

  3. webapi框架搭建-安全机制(二)-身份验证

    webapi框架搭建系列博客 身份验证(authentication)的责任是识别出http请求者的身份,除此之外尽量不要管其它的事.webapi的authentication我用authentica ...

  4. SQL语句(十九)——存储过程(练习)

    select * From Student select * From Course select * from SC --INSERT INTO SC (Sno, Cno, Grade) --VAL ...

  5. Spring3.2 Contorller单元测试参数问题: java.lang.NoSuchMethodException

    使用3.2做单元测试的时候发现这个问题,因为之前都是用3.0中的配置适配器使用AnnotationMethodHandlerAdapter,到3.2中升级为RequestMappingHandlerA ...

  6. PartyPlay发布版

    发布版本在beta版本的基础之上修改了pose王中的显示函数部分,使其可以正常的多次显示不同图片,不会出现卡在一张图片的问题上. 因此总的发布版本内容: 1.谁是卧底: 点击进入谁是卧底,进入游戏前的 ...

  7. numpy 矩阵操作

    numpy 对矩阵对角线.上三角.下三角以及它们所在位置索引的提取 import numpy as np a = np.random.randint(0,10,[5,5]) print(a) # c ...

  8. util.promisify 的那些事儿

    util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具 ...

  9. iOS学习笔记(4)— UITableView的重用机制

    UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的个数.比如,cell高度为90.那么480 / 90 = 5  ...

  10. XSS练习小游戏和答案参考

    源码:https://files.cnblogs.com/files/Eleven-Liu/xss%E7%BB%83%E4%B9%A0%E5%B0%8F%E6%B8%B8%E6%88%8F.zip 感 ...