文件的邏輯結構


1、文件的邏輯結構

所謂的“邏輯結構”,就是指在用戶看來,文件內部的數據應該是如何組織起來的。而“物理結構”指的是在操作系統看來。文件的數據是如何存放在外存中的。

類似於數據結構的“邏輯結構”和“物理結構”。

如“線性表”就是一種邏輯結構,在用戶角度看來,線性表就是一組有先后關系的元素序列,如: a,b, c, d, e ......

“線性表”這種邏輯結構可以用不同的物理結構實現,如:順序表/鏈表。順序表的各個元素在邏輯上相鄰,在物理上也相鄰;而鏈表的各個元素在物理上可以是不相鄰的。因此,順序表可以實現“隨機訪問”,而“鏈表”無法實現隨機訪問。

可見,算法的具體實現與邏輯結構、物理結構都有關(文件也一樣,文件操作的具體實現與文件的邏輯結構、物理結構都有關)

1.1、有結構文件

按文件是否有結構分類,可以分為無結構文件、有結構文件兩種。

無結構文件:文件內部的數據就是一系列二進制流或字符流組成。又稱“流式文件”。如:Windows操作系統中的.txt文件。

有結構文件:由一組相似的記錄組成,又稱“記錄式文件”。每條記錄又若干個數據項組成。如:數據庫表文件。一般來說,每條記錄有一個數據項可作為關鍵字。根據各條記錄的長度(占用的存儲空間)是否相等,又可分為定長記錄和可變長記錄兩種。

image-20201210115014270

1.1.1、順序文件

順序文件:文件中的記錄一個接一個地順序排列(邏輯上),記錄可以是定長的或可變長的。各個記錄在物理上可以順序存儲或鏈式存儲。

image-20201210115308060

image-20201210115328159

可見,順序文件的缺點是增加/刪除一個記錄比較困難(如果是串結構則相對簡單)

1.1.2、索引文件

image-20201210115444764

索引表本身是定長記錄的順序文件。因此可以快速找到第i個記錄對應的索引項。
可將關鍵字作為索引號內容,若按關鍵字順序排列,則還可以支持按照關鍵字折半查找。
每當要增加/刪除一個記錄時,需要對索引表進行修改。由於索引文件有很快的檢索速度,因此主要用於對信息處理的及時性要求比較高的場合。
另外,可以用不同的數據項建立多個索引表。如:學生信息表中,可用關鍵字“學號”建立一張索引表。也可用“姓名”建立一張索引表。這樣就可以根據“姓名”快速地檢索文件了。
(Eg:SQL就支持根據某個數據項建立索引的功能)

1.1.3、索引順序文件

思考索引文件的缺點:每個記錄對應一個索引表項,因此索引表可能會很大。比如:文件的每個記錄平均只占8B,而每個索引表項占32個字節,那么索引表都要比文件內容本身大4倍,這樣對存儲空間的利用率就太低了。

image-20201210115706638

索引順序文件是索引文件和順序文件思想的結合。索引順序文件中 ,同樣會為文件建立一張索引表,但不同的是:並不是每個記錄對應一個索引表項,而是一組記錄對應一個索引表項。

1.1.3.1、檢查效率分析

image-20201210115843007

若一個順序文件有10000個記錄,則根據關鍵字檢索文件,只能從頭開始順序查找(這里指的並不是定長記錄、順序結構的順序文件),平均須查找5000個記錄。

若采用索引順序文件結構,可把10000個記錄分為v10000= 100 組,每組100個記錄。則需要先順序查找索引表找到分組(共100個分組,因此索引表長度為100,平均需要查50次),找到分組后,再在分組中順序查找記錄(每個分組100個記錄,因此平均需要查50次)。可見,采用索引順序文件結構后,平均查找次數減少為50+50 = 100次。

同理,若文件共有10個記錄,則可分為1000個分組,每個分組1000個記錄。根據關鍵字檢索一個記錄平均需要查找500+500 = 1000次。這個查找次數依然很多,如何解決呢?

1.1.3.2、多級索引順序文件

為了進一步提高索引效率,可為順序文件建立多級索引表。例如,對一個含10^6個記錄的文件,可先為該文件建立一張低級索引表,每100個記錄為一組,故低級索引表中共有10000個表項(即10000個定長記錄),再把這10000個定長記錄分組,每組100個,為其建立頂級索引表,故頂級索引表中共有100個表項。

image-20201210120219371

11


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM