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

转自:http://www.ha97.com/4580.html

本文图片来自Ricky Ho的博文MongoDB构架(MongoDB Architecture),这是个一听就感觉很宽泛的话题,但是作者在文章中确实对MongoDB由内至外的架构进行了剖析。本文截取了其文章中的几张重点架构示意图片进行简单描述。希望对大家有用。

MongoDB数据文件内部结构

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

相关阅读:《MongoDB数据文件内部结构

在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一样。

MongoDB数据同步

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

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

分片机制

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

服务器角色

上面讲了分片的标准,下面是具体在分片时的几种节点角色

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

更多详细内容请看原文:MongoDB Architecture

翻译:http://blog.nosqlfan.com/html/3887.html

时间: 2024-10-12 09:10:20

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

深入剖析 MongoDB 架构

近日,软件工程师Ricky Ho的在 他的博客里发表了一篇关于MongoDB架构( MongoDB Architecture)的博文,虽然这是一个听起来感觉很宽泛的话题,但是作者在文章中确实对MongoDB由内至外的架构进行了剖析.本文截取了其文章中的几张重点架构示意图进行简要描述. 1.MongoDB数据文件内部结构 MongoDB在数据存储上按命名空间来划分,一个Collection是一个命名空间,一个索引也是一个命名空间. 同一个命名空间的数据被分成很多个Extent,Extent之间使用

腾讯首席技术架构教你从C语言过渡到C++,真的很实用!

腾讯首席技术架构教你从C语言过渡到C++,真的很实用!说到C++和C语言的区别,大部分人都会想到面向对象和面向过程.然而这种说法并不准确.面向对象和面向过程指的是两种不同的程序设计思想,而C++与C是两种编程语言,难道C++就不能用于面向过程去解决问题吗,当然可以.而面向对象的设计思想也可以用到C语言中去,我之前的文章就涉及过这方面的知识.最后,如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题. 腾讯首席技

DZ3.2文章内容页代码注释,很不错的。

DZ3.2文章内容页代码注释,很不错的.<!--{template common/header}--><!--e之路网络科技--文章页--> <script type="text/javascript" src="{$_G['setting']['jspath']}forum_viewthread.js?{VERHASH}"></script><script type="text/javascript&

架构设计分享之权限系统(看图说话)

前面一篇文章<最近架构随想>,我提到架构设计的一些构想,其实也是对之前项目经验的一些归纳及总结.今天我们就以权限系统作为切入点,谈一谈怎么设计权限系统以及怎么做到系统具有以下特性: Organized:如果系统组织比较好,可以起到事半功倍的效果. Encapsulated:对功能,结构,数据进行有效的封装,会使系统维护变得更加容易. Reusable:对常用功能以及组件进行有效的封装,可以使系统变得结构清晰且方便维护. Extensible:在设计系统的时候,如果很好的遵守OO的设计理念(OO

UI 架构 - 读Martin Flower相关文章总结

近来看了大师Martin Flower的一些关于UI 架构的文章,为了加强理解特总结如下. 大师从设计的角度入手,阐述了UI 架构的具有代表性跟影响力的模式.其中当然提到了MVC此耳熟能详的模式.并从MVC的源起和演化为我们澄清了对MVC的理解.除了MVC, 大师对UI 架构的其他模式也进行了总结归纳.下面此文简要总结大师对各模式的评述. 1. Forms and Controls此模式出现于client-server应用盛行之时,晚于MVC的出现.同学们接触过VB, VC, Delphi 跟

[翻译]MongoDb 架构(MongoDb Architecture)

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

FastDFS架构剖析(非常值得一看的架构分析和解读)

FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只 能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用.准确地讲,Google FS以及FastDFS. mogileFS.HDFS.TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务. FastDFS的设计理念 FastDFS是为互联网应用量身定做的分布式文件系统,充分考虑了冗余备份.负载均衡

HCIE学习和考试如何规划、安排,看这篇文章就够了(虽然很骨感)

HCIE之路分享下 备考HCIE 心酸之路去年三月份一个人踏上魔都奋斗之路,之前在武汉 一直做华三的产品. 武汉准备考HCIE 一直等到来上海 ,去QYT 报了名,琉儿给我办理好了一切.本以为会按照很顺利的节奏参加军哥的课程,从NA 开始学习.可是,生活总是不如人愿. 从四月份开始 进入一个变态项目ZWY . 为啥说他变态呢. 这样说吧 ,这个项目到现在还没做完 还在干. 从4月10 号开工,一直到2018.01.01 最后一次大割接完成. 从4月份到10月份每天早上9点半到现场,晚上2点多下班

这样的文章看起最带劲

前两天把工作辞了,原因是公司环境恶劣,我遇到环境恶劣的公司很多,但是这个公司比以前公司多了些恶心套路,首先这个负责人肚子里面装没装坏水,我不敢绝对的肯定,但是他如果肚里真没装坏水,那我就觉得他就更本不适合做领导,他确少做领导应有的洞察力,公司核心程序员一共三人,一个web端/一个android端/一个ios端/ 我就是做ios的, 我们这边的办公桌是面对面的一共座了4个人, 其中多出的一个位置被一个妞座着,这妞到底是做啥的我现在也不知道,我位置就对着那妞,android对着的是那做web的,那妞