###### tags: `database` # 存儲層  三種資料 * 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 能循序放資料
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up