mongodb資料檔案格式 二

2021-07-06 01:06:31 字數 1503 閱讀 6635

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。

常見資料檔案格式

hex檔案 hex hex檔案是十六進製制檔案,整個檔案以行為單位,每行以冒號開頭,內容全部為16進製製碼 以ascii碼形式顯示 第乙個位元組 0x10表示本行資料的長度 第二 三位元組 0x00 0x08表示本行資料的起始位址 第四位元組 0x00表示資料型別,資料型別有 0x00 0x01 0...

儲存系統實現 資料檔案格式

在第一篇中講到了整個索引檔案的實現方式與檢索方式的實現,這一篇中講到我實現的各個檔案的結構。儲存管理檔案 這個檔案的作用主要是對資料檔案進行分塊管理,管理資料檔案塊是否使用,還有相應的偏移位置,申請資料檔案塊都需要從這裡進行申請。對於檔案的 也相應的改這個檔案的狀態。下面畫的是該檔案的結構 索引檔案...

mongodb 資料檔案太大

問題 開發伺服器mongodb資料檔案太大。占用近80g,其中某個db占用最大 運營環境這個db的資料只有3g大小 分析 開發環境有大量測試的 增加 刪除 修改 操作,長期以來會導致資料檔案非常大,但 實際儲存資料並不是很多.129m db name.1 2.1g db name.10 2.1g d...