您好,欢迎访问一九零五行业门户网

mongodb数据文件格式

本文适合于对mongodb有一定了解的朋友阅读。 mongodb的数据文件存在dbpath选项指定的目录里。每个库(database)都有一系列的文件:dbname.ns, dbname.0, dbname.1, ...数据文件也叫pdfile,意思是portable data file。 dbname.ns文件 dbname.ns文件存储命名空
本文适合于对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文件的大小。
相关代码类
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。
相关代码类
其它类似信息

推荐信息