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。

mongodb數據文件格式

當一個命名空間被刪除的時候,它的所有的Extent都會掛到名為$freelist的collection的Extent鏈表中。那么,分配Extent的時候,會先從$freelist的Extent鏈表中尋找。如果找不到,就申請新的Extent。

相關代碼類

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享