深入剖析 MongoDB 架构

近日,软件工程师Ricky Ho的在 他的博客里发表了一篇关于MongoDB架构( MongoDB Architecture)的博文,虽然这是一个听起来感觉很宽泛的话题,但是作者在文章中确实对MongoDB由内至外的架构进行了剖析。本文截取了其文章中的几张重点架构示意图进行简要描述。

1、MongoDB数据文件内部结构

  • MongoDB在数据存储上按命名空间来划分,一个Collection是一个命名空间,一个索引也是一个命名空间。
  • 同一个命名空间的数据被分成很多个Extent,Extent之间使用双向链表连接。
  • 在每一个Extent中,保存了具体每一行的数据,这些数据也是通过双向链接来连接的。
  • 每一行数据存储空间不仅包括数据占用空间,还可能包含一部分附加空间,这使得在数据Update变大后可以不移动位置。
  • 索引以BTree结构实现。

2、在MongoDB中实现事务

众所周知, MongoDB只支持对单行记录的原子性修改,并不支持对多行数据的原子操作。但是通过上图中的不可思议的操作步骤,实际上你也可以自己实现该事务。 其步骤如下

  • 第1步:先记录一条事务记录,将要修改的多行记录的修改值写到里面,并设置其状态为init(如果这时候操作中断,那么在重新启动时,会判断到它处于init状态,从而将其保存的多行修改操作应用到具体的行上)。
  • 第2步:然后更新具体要修改的行,将刚才写的事务记录的标识写到它的tran字段中。
  • 第3步:将事务记录的状态从init变成pending(如果在这时候操作中断,那么在重新启动时,会判断到它的状态是pending,这时查 看其所有对应的多条要修改的记录,如果其tran值不为空,那么就进行第4步;如果值为空,说明第4步已经执行过了,直接将其状态从pending变成 commited就行)。
  • 第4步:将需要修改的多条记录的相应值加以修改,并且unset掉之前的tran字段。
  • 第5步:将事务记录那一条的状态从pending变成commited,事务至此完成。

其实上面的步骤并不罕见,在支持事务的DBMS中,其事务原子性提交的保证大多都与上面类似。而事务记录的tran那条记录,就类似于这些DBMS中的redolog。

3、MongoDB数据同步


MongoDB采用Replica Sets模式的同步流程

本流程可简要描述如下:

  • 红色箭头表示写操作可以写到Primary上,然后异步同步到多个Secondary上。
  • 蓝色箭头表示读操作可以从Primary或Secondary任意一个中读取。
  • 各个Primary与Secondary之间一直保持心跳同步检测,用于判断Replica Sets的状态。

4、分片机制

  • MongoDB的分片是指定一个分片key来进行,数据按范围分成不同的chunk,每个chunk的大小有限制。
  • 有多个分片节点保存这些chunk,每个节点保存一部分的chunk。
  • 每一个分片节点都是一个Replica Sets,这样保证数据的安全性。
  • 当一个chunk超过其限制的最大体积时,会分裂成两个小的chunk。
  • 当chunk在分片节点中分布不均衡时,会引发chunk迁移操作。

5、服务器角色

前面讲了分片的机制,下面是具体在分片时几种节点的角色:

  • 客户端访问路由节点mongos来进行数据读写。
  • config服务器保存了两个映射关系,一个是key值的区间对应哪一个chunk的映射关系,另一个是chunk存在哪一个分片节点的映射关系。
  • 路由节点通过config服务器获取数据信息,通过这些信息,找到真正存放数据的分片节点进行对应操作。
  • 路由节点还会在写操作时判断当前chunk是否超出限定大小。如果超出,就分列成两个chunk。
  • 对于按分片key进行的查询和update操作来说,路由节点会查到具体的chunk然后再进行相关的工作。
  • 对于不按分片key进行的查询和update操作来说,mongos会对所有下属节点发送请求然后再对返回结果进行合并。
时间: 2024-10-12 07:36:50

深入剖析 MongoDB 架构的相关文章

boost.asio源码剖析(二) ---- 架构浅析

* 架构浅析 先来看一下asio的0层的组件图.                     (图1.0) io_object是I/O对象的集合,其中包含大家所熟悉的socket.deadline_timer等对象,主要功能是提供接口给用户使用. services服务是逻辑功能的实现者,其中包含提供定时功能的deadline_timer_service.提供socket相关功能的win_iocp_socket_service(windows平台)/reactive_socket_service(其他

MongoDB架构——记得结合前面的文章看,里面的图画的很好

转自:http://www.ha97.com/4580.html 本文图片来自Ricky Ho的博文MongoDB构架(MongoDB Architecture),这是个一听就感觉很宽泛的话题,但是作者在文章中确实对MongoDB由内至外的架构进行了剖析.本文截取了其文章中的几张重点架构示意图片进行简单描述.希望对大家有用. MongoDB数据文件内部结构 MongoDB在数据存储上按命名空间来划分,一个collection是一个命名空间,一个索引也是一个命名空间 同一个命名空间的数据被分成很多

[翻译]MongoDb 架构(MongoDb Architecture)

转自:http://blog.dufei.cc/index.php/archives/25/ NOSQL最近成为了一个炙手可热的话题(作者发表在2012年,话说对于现在来说,NOSQL已经如火如荼了).大规模架构的web服务开发中对于高扩展性和半结构化数据的要求推动着数据库往NOSQL方向转变.最近几年已经有了不少NOSQL数据库解决方案.我在过去的blog中(不是我的blog,作者blog挺卡的)已经介绍过基于分布式系统理论的NOSQL,同时也介绍了一些挺好的产品,比如CouchDB和Cass

MongoDb 架构(MongoDb Architecture)

NOSQL最近成为了一个炙手可热的话题(作者发表在2012年,话说对于现在来说,NOSQL已经如火如荼了).大规模架构的web服务开发中对于高扩展性和半结构化数据的... http://v.yinyuetai.com/playlist/3250446http://v.yinyuetai.com/playlist/3250449http://v.yinyuetai.com/playlist/3250448http://v.yinyuetai.com/playlist/3250457http://v

mongodb架构篇

一.  复制集 Replica set的架构 Replica set的部署 主从操作日志 在local数据库里面:db.oplog.rs.find() 日志的基本信息:db.printReplicationInfo() 查看slave的演示状况:db.printSlaveReplicationInfo() 主从配置信息:db.system.replset.find() 管理replica set 主从切换 1           冰冻实例不参与primary选举:rs.freeze(30) 2 

剖析LNMP架构

一.什么是LNMP? LNMP指的是一个基于Centos/Debian编写的NGINX.PHP.MySQL.PHPmyadmin.eaccelerator集成的一键安装包.可以在VPS.独立的(云)主机上轻松地安装生产环境. 1.软件服务解释: Linux:一套免费试用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统.代表linux版本有: NGINX:一个高性能的HTTP和反向代理服务器,也是一个IMAP/pop3/SMTP代理服务

支付宝系统架构内部剖析

本文转载于网上的文章 <最全最强解析:支付宝系统架构内部剖析(架构图)>. 最早的出处没有找到,原文作者也未知. 如果你知道请告诉我. 支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 消息系统 数据分布 数据缓存 支付宝技术产品线 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) 貌似原发起者离开了阿里,现在这个项目改名为RocketMQ Metamorphosis (MetaQ) 是一个高性能.高可用.可扩展的分布式消息中间

转 最全最强解析:支付宝钱包系统架构内部剖析(架构图)

原文: 最全最强解析:支付宝钱包系统架构内部剖析(架构图) 2015/06/05 支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能.高可用.可扩展的分布式消息中间件,类似于LinkedIn的Kafka,具有消息存储顺序写.吞吐量大和支持本地和XA事务等特性,适用 于大吞吐量.顺序消息.广播和日志数据传输等场景,在淘宝和支付宝

[转] 支付宝系统架构内部剖析

本文转载于网上的文章 <最全最强解析:支付宝系统架构内部剖析(架构图)>. 最早的出处没有找到,原文作者也未知. 如果你知道请告诉我. 支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 消息系统 数据分布 数据缓存 支付宝技术产品线 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) 貌似原发起者离开了阿里,现在这个项目改名为RocketMQ Metamorphosis (MetaQ) 是一个高性能.高可用.可扩展的分布式消息中间