檔案存取方法(file access method)
假設你有一份很長的播放清單。你可以從第一首一路聽到最後一首;你也可以直接跳到第 27 首;或者你可以保留一份按演出者排的索引,好讓你一下子跳到某個樂團的第一首歌。這三種習慣就是三種經典的檔案存取方法:程式如何選擇在一個檔案的內容中移動。
循序存取(sequential access)按順序讀或寫檔案,一段接一段,位置指標就只是一路往前走。這是最簡單的,也符合我們讀文字或播放音訊的方式;允許倒帶回開頭,但通常是從頭到尾。直接存取(direct access,也叫相對存取或隨機存取)讓你立刻跳到任何紀錄或位元組偏移量、在那裡讀或寫、再跳到別處,不必經過中間的一切。這適合一個必須取出第 5000 筆紀錄、卻不必讀前面 4999 筆的資料庫。索引存取(indexed access)會建立一個較小的索引檔,把一個鍵(比方說顧客編號)對應到相符紀錄的位置;你先搜尋那個精簡的索引,再用直接存取一下子跳到資料。索引本身也常存在檔案裡、並以直接存取的方式取用。
為什麼重要:你需要的存取方法,形塑了哪些檔案系統功能、甚至哪種硬體能好好服務你。循序存取對旋轉的磁碟和磁帶很友善(不必跳來跳去);直接存取讓資料庫的隨機讀取變得實用,而在沒有搜尋懲罰的固態硬碟上又很便宜。一個誠實的重點:這些是建立在同一套底層讀、寫、定位操作之上的「使用模式」——循序對上直接,主要是「你是否呼叫 seek、以及在哪裡呼叫」的問題,而不是另一組系統呼叫。
一個記錄分析器從頭到尾循序讀取一份 2 GB 的記錄檔。一個訂位系統則直接定位到座位紀錄 18C、讀它、更新它、再寫回去——那就是直接存取。一個電話簿應用程式保留一份從姓名到偏移量的索引,讓它不必掃描每一筆就能跳到「Smith」。
同樣的讀/寫/定位基本操作,三種模式:依序、跳到任何地方、或先查索引。
循序對上直接,主要關乎你是否、以及如何呼叫 seek,而非另一組系統呼叫。直接存取在固態硬碟上很便宜(無搜尋時間),但在旋轉磁碟上會被磁頭移動的成本懲罰。