1. 程式人生 > >第七回 檔案系統

第七回 檔案系統

mapfile系統的結構還是很簡單的,不過實現起來還是有些小麻煩,首先不可能一個block存一個檔案,那會有無數個檔案的,但也不能整張地圖只存一個檔案,因為我們要考慮到各個地塊的版本控制的問題.所以在mapfile系統的實現中引入了field的概念,一個field是一大塊區域,目前為256mx256m,也就是64x64個block,一個field的資料儲存為一個檔案,所以我們checkin/checkout地塊也是以field為單位進行的.由於一個field裡包含了多個block,而每個block又要求能單獨寫入資料,所以具體的程式碼實現還是有點難度的,field檔案被分割成cluster,會根據每個block的資料大小為它動態分配所需的cluster,並把這些cluster連結起來.請注意,這種儲存方式的讀取效率是很低的,因為一個block的資料不是以連續方式儲存在檔案中的,讀一個block可能會使磁頭更多在硬碟的不同位置上跳來跳去.此外,考慮到雖然使用了field來減少檔案數量,但是對於一張很大的地圖來說,檔案數量還是太多了,所以,最終我又寫了一套新的mapfile系統,整張地圖會被打包成一個地圖檔案,這個mapfile系統用來讀取這個地圖檔案.只在遊戲釋出時使用,由於這個包是隻讀的,包裡的block資料就可以用連續的方式儲存了,可以提高讀取速度.舊的mapfile系統只用於編輯時使用.當然,這兩個mapfile系統的介面是一致的,對上層是保持一致。