设为首页 加入收藏

TOP

mongodb数据文件格式
2014-11-24 08:16:22 来源: 作者: 【 】 浏览:0
Tags:mongodb 数据 文件 格式
mongodb数据文件格式
本文适合于对mongodb有一定了解的朋友 阅读
mongodb的数据文件存在dbpath选项指定的目录里。每个库(database)都有一系列的文件:dbname.ns, dbname.0, dbname.1, ...数据文件也叫pdfile,意思是Portable Data File。
www.2cto.com
dbname.ns文件
dbname.ns文件存储命名空间信息。在mongodb里,每个collection都具有一个命名空间,名字为dbname.collection_name。dbname.ns文件存储的是一个哈希表节点数组。key是根据命名空间的名字,value是命名空间信息。哈希表节点的大小是628字节,dbname.ns文件的默认大小是16M,一共可以存放26715个命名空间。nssize选项可以设置dbname.ns文件的大小。
相关代码类
NamespaceIndex NamespaceIndex is the ".ns" file you see in the data directory
NamespaceDetails 命名空间信息,存储在哈希表节点里面。
HashTable 哈希表实现
dbname.<#>系列文件
dbname.<#>系列文件存储了每个库的所有数据,其文件格式为
--------------------------------------------
DataFileHeader
--------------------------------------------
Extent (for a particular namespace)
Record
...
Record (some chained for unused space)
--------------------------------------------
more Extents...
--------------------------------------------
DataFileHeader是数据文件的头部,后面的部分为Extent。文件空间的分配以Extent为单位。每个命名空间的所申请的Extent形成一个双向链表,表头和表尾存在命名空间信息里。Record即记录,在Extent里分配,每个Extent里的所有Record形成一个双向链表,表头和表尾存在Extent头部。可以想到,对命名空间的所有Record的遍历方法为:遍历Extent链表,对每个Extent,遍历其Record链表。空闲的Record(Extent里剩余的空间、或者Record被删除),称作DeleteRecord,根据其大小,形成19个单向链表(表头也存在命名空间里)。可以想到,申请一个Record的方法:先从空闲的Record里面找;如果找不到,则分配新的Extent。
当一个命名空间被删除的时候,它的所有的Extent都会挂到名为$freelist的collection的Extent链表中。那么,分配Extent的时候,会先从$freelist的Extent链表中寻找。如果找不到,就申请新的Extent。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇十条常用nmap命令行格式 下一篇MongoDB命令行下格式化find()返回..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何从内核协议栈到 (2025-12-27 03:19:09)
·什么是网络协议?有哪 (2025-12-27 03:19:06)
·TCP/ IP协议有哪些 (2025-12-27 03:19:03)
·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)