2.2 · 順序存取 vs 直接存取
目標: 解釋兩者差異、列出優缺點、為情境選對方法。
「存取方法」是什麼意思
資料儲存後,讀取某條特定記錄的方式根本上有兩種:
| 存取方法 | 策略 | 類比 |
|---|---|---|
| Sequential access 順序存取 | 從頭開始按順序讀 | 用卡式磁帶聽歌 —— 先快進過前面的 |
| Direct (random) access 直接(隨機)存取 | 透過索引 / 地址直接跳到該記錄 | 在 Spotify 選歌 —— 點一下就播 |
順序存取
工作方式
記錄按固定順序逐條儲存(通常按學生 ID 之類的鍵排序)。要找第 N 條,系統會讀第 1、2、… N 條。
最適合順序存取的設備
- 磁帶 —— 移動磁頭慢,唯一現實選擇就是按序讀。
- 光盤用於流式順序資料時(今天少見)。
- 流式日誌文件。
優缺點
| 優點 | 缺點 |
|---|---|
| 儲存簡單便宜 | 找特定記錄慢 |
| 按順序處理每條記錄時高效(如月薪計算) | 隨機查詢低效 |
| 適合備份,因為磁帶每 GB 便宜 | 嚴格順序佈局下新增一條記錄要重寫整個文件 |
典型用途
- 備份 —— 一次寫入,需要時按序還原。
- 批處理 —— 通宵月薪、月度賬單。
- 日誌文件 —— 只追加,調試時按序讀。
直接(隨機)存取
工作方式
每條記錄都在某個地址(磁碟塊、哈希位置、或索引指向)。要找第 N 條,系統算出地址直接讀 —— 無需掃描。
最適合直接存取的設備
- 硬碟 (HDD) —— 讀寫頭尋道到某磁道與扇區。
- 固態盤 (SSD) —— 更快,無機械部件。
- RAM —— 基本上全是隨機存取。
- 閃存、光盤。
優缺點
| 優點 | 缺點 |
|---|---|
| 查找任一記錄快 | 每 GB 較貴(尤其 SSD) |
| 單條記錄易插入 / 更新 | 軟件更復雜(索引、哈希表) |
| 支援互動應用(網頁、遊戲) | 鍵碰撞時性能下降 |
典型用途
- 網上銀行 —— 實時查餘額。
- 資料庫查詢 ——
SELECT … WHERE id = 1001。 - 操作系統文件 —— 憑路徑立即定位任一文件。
並排對比
| 方面 | 順序 | 直接 |
|---|---|---|
| 讀取順序 | 由首至尾 | 任意順序 |
| 找一條記錄的時間 | O(N) | 平均 O(1) |
| 讀全部記錄的時間 | O(N) —— 高效 | O(N) —— 行但無優勢 |
| 儲存硬件 | 磁帶、順序文件 | 硬碟、SSD、RAM |
| 更新成本 | 經常要重寫整個文件 | 原地更新 |
| 每 GB 成本(典型) | 低(磁帶) | 較高(SSD) |
| 插入 / 刪除 | 難 | 易 |
| 適合 | 備份、批處理 | 實時 / 互動 |
二選一
問三個問題:
- 我需要快速訪問單條記錄嗎? → 直接。
- 我每次都處理每條記錄嗎? → 順序就行且更便宜。
- 我需要便宜的歸檔儲存嗎? → 磁帶(順序)勝出。
很多真實系統兩種都用:
- 銀行把交易存在硬碟(直接)供日常用。
- 通宵任務把交易複製到磁帶(順序)做異地備份。
現實例子 · 薪酬系統
一家 10,000 員工的公司每月跑一次工資,並讓每位員工隨時上網即時查看工資單。
| 活動 | 存取方法 | 原因 |
|---|---|---|
| 月度工資計算 | 順序 | 按順序處理每位員工 —— 高效 |
| 員工查工資單 | 直接 | 現在就要那位員工的記錄 |
| 歸檔去年記錄 | 順序(磁帶) | 冷儲存,少用 |
同一份資料為不同需求用不同方式組織。
常見誤解
- 「順序總是更慢。」 錯 —— 按順序讀每條記錄時它最快。
- 「直接存取意味着資料隨機。」 不 —— 是隨機存取,不是資料隨機。資料本身有結構。
- 「現代系統只用直接存取。」 錯 —— 企業裏磁帶備份仍是標配。
練習活動
為每個情境選順序或直接並説明理由:
- 税務局通宵批處理 700 萬份税表。
- 港鐵閘機查詢你的八達通餘額。
- 學校每學期印 1,200 份成績單。
- 機票訂位系統實時查座位空閒。
- 閉路電視 DVR 存 30 天錄像,僅在事故後才看。
答案
- 順序 —— 批處理每條記錄。
- 直接 —— 現在就要查一張卡。
- 順序 —— 每位學生處理一次。
- 直接 —— 單座查詢。
- 寫為順序,讀多為順序;回看時兩種都行。
考試式題目
題(4 分): 説出直接存取相對順序存取的兩個優勢,以及一個順序存取更合適的情況。
參考答案:
直接存取的優勢(任 2):
- 取特定記錄更快(O(1) vs O(N))。
- 適合互動應用(如 ATM、網上訂位)。
- 可原地插入或更新記錄,不必重寫整個文件。
順序更適合的情況:
- 按順序讀每位員工記錄的月度工資任務 —— 廉價磁帶上的順序存取對此種工作負載又快又省。
關鍵要點
- 兩種存取方法:順序與直接。
- 順序 = 按序讀;直接 = 任意跳。
- 按工作負載選方法。真實系統常兩者並用。
➡️ 下一節:2.3 校驗、核對與奇偶校驗