mongodb数据文件格式
2013-03-15 17:50
267 查看
来自:http://www.cnblogs.com/tripleH/archive/2013/03/15/2958147.html
本文适合于对mongodb有一定了解的朋友阅读。
mongodb的数据文件存在dbpath选项指定的目录里。每个库(database)都有一系列的文件:dbname.ns, dbname.0, dbname.1, ...数据文件也叫pdfile,意思是Portable Data File。
相关代码类
NamespaceIndex
NamespaceIndex is the ".ns" file you see in the data directory
NamespaceDetails
命名空间信息,存储在哈希表节点里面。
HashTable
哈希表实现
--------------------------------------------
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。
相关代码类
DataFileHeader
Extent
DeletedRecord、Record
本文适合于对mongodb有一定了解的朋友阅读。
mongodb的数据文件存在dbpath选项指定的目录里。每个库(database)都有一系列的文件:dbname.ns, dbname.0, dbname.1, ...数据文件也叫pdfile,意思是Portable Data File。
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。
相关代码类
DataFileHeader
Extent
DeletedRecord、Record
相关文章推荐
- Hive数据仓库(11)之解析Json格式文件
- CCS“探针”使用的数据文件格式
- 解析固定格式的文件数据 php脚本
- Jquery调用从ashx文件返回的jsonp格式的数据处理实例
- 【20090629-03】jpg地图的空间数据文件-jgw文件格式
- 从零开始:NTFS文件格式的数据恢复的程序设计python语言(3)
- 使用python读取数据科学最常用的文件格式
- nutch抓取数据后生成的文件格式
- Hive中的数据类型和文件格式
- 从数据库得到数据导出指定格式的xml文件,上传到NC接口,返回回执到本地一个xml文件
- MySQL如何导入csv格式数据文件解决方案
- parquet文件格式——本质上是将多个rows作为一个chunk,同一个chunk里每一个单独的column使用列存储格式,这样获取某一row数据时候不需要跨机器获取
- 怎样自定义数据文件格式
- uuids.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- Matroska媒体文件中存放的ASS字幕数据格式 与 标准ASS字幕格式 的区别
- 将excel中的若干列数据生成json格式文件
- SQL 语句读取几种常见文件格式中的数据
- 用PHP将mysql数据表转换为excel文件格式
- 第六章:数据加载、存储于文件格式Day12-14
- 读取csv文件转换成你自己想要格式的数据