tags: database

存儲層

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 能循序放資料