MongoDB 构架图分享 本文图片来自 Ricky Ho 的博文 MongoDB 构架( MongoDB Architecture),这是个一听就感觉很宽泛的话题,但是作者在文章中确实对 MongoDB 由内至外的架构进行了剖析
本文截取了其文章中的几张重点架构示意图片进行简单描述
希望对大家有用
MongoDB 数据文件内部结构 1
MongoDB 在数据存储上按命名空间来划分,一个 collection 是一个命名空间,一个索引也是一个命名空间 2
同一个命名空间的数据被分成很多个 Extent, Extent 之间使用双向链表连接 3
在每一个 Extent 中,保存了具体每一行的数据,这些数据也是通过双向链接连接的 4
每一行数据存储空间不仅包括数据占用空间,还可能包含一部分附加空间,这使得在数据 update 变大后可以不移动位置 5
索引以 BTree 结构实现 在 MongoDB 中实现事务 众所周知,MongoDB 只支持对单行记录的原子性修改,并不支持对多行数据的原子操作
但是通过上图中的变态操作,实际你也可以自己实现事务
其步骤如图所未: 第 1 步:先记录一条事务记录,将要修改的多行记录的修改值写到里面,并设置其状态为 init( 如果这时候操作中断,那么在重新启动时,会判断到他处于 init 状态,从而将其保存的多行修改操作应用到具体的行上) 第 2 步:然后更新具体要修改的行,将刚才写的事务记录的标识写到它的 tran 字段中 第 3 步:将事务记录的状态从 init 变成 pending(如果在这时候操作中断,那么在重新启动时,会判断到它的状态是 pending 的,这时候查看其所有对应的多条要修改的记录,如果其 tran 有值,那么就进行第 4 步,如果没值,说明第 4 步已经执行过了,直接将其状态从 pending