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 校验、核对与奇偶校验