存儲層
Image Not Showing
Possible Reasons
- The image was uploaded to a note which you don't have access to
- The note which the image was originally uploaded to has been deleted
Learn More →
三種資料
- File: table info, record file
- Metadata
- Index
資料庫的 ACID 分別由 concurrency manager 和 recovery manager 實現。
硬碟三時間
- seek (沿直徑方向移動資料臂)
- rotational (平均轉半圈)
- transfer (根據資料量而不同)
OS 提供的資料訪問方法
Block level
- Sector 是資料最原始的單位
- OS 將 Sector 的概念隱藏於 Block
- Block size 由 OS 決定
- 使用時將 Block 映射到 Memory Page
File level
- OS 將 Block 的概念隱藏
- 一個檔案為一系列 logical block 組成
- 管理這些 logical block 的 schema 多多,比如 contigous, linked, indexed, multi-level
- 將 Page 的概念隱藏為 I/O Buffer
File v.s. block
- Block 難實作,File 簡單方便
- 可控程度
- Block 可根據資料庫的使用需求客製化要緩存的資料
- File 對 page replacement 難以控制
- 比如某些 Query 可能會在一段時間後訪問 File 之前訪問過的 Page,OS 可能會因其他因素將其 swap 掉,但 DBMS 可預測未來存取資料的行為,選擇性的將其留在記憶體更久一點
- Block 無 OS 的限制,比如限制檔案大小
- 面對 OS 提供的 Block 層服務大多與 OS 本身掛鉤,影響移植性
- 根據 File System 的實作可能影響正確性 (e.g. WAL),因為 File System 沒有義務實現 ACID
最後 Vanilla DB 使用妥協策略:在 File Level 下直接訪問 logical block
- 優點
- 簡單
- Block 內的資料存放邏輯可客製化
- Flush 與否自己控制,滿足 ACID
- 需注意不要讓 OS 主動幫我們管理緩存
- 缺點
- 只能操縱 logical block 層級
- 即使將資料循序放也無法確保 disk 能循序放資料