v0.7.0

重播與復原

最後更新

本頁說明 ToriiDB 如何從 snapshot 與 log 載入資料庫、退回較舊世代,以及如何備份資料。

重播

資料庫在第一次使用時載入(sync.Once):

  1. 移除殘留的 *.tmp 檔。
  2. 由新到舊列出 snapshot 編號;沒有 snapshot 時從世代 0 開始(只有 log)。
  3. 世代 N:重播 N.snap(若 N > 0),接著依序重播存在的 N+1.log、N+2.log、...。
  4. 遇到 I/O 錯誤時記為 loadErr,改試下一個較舊的 snapshot。
  5. 成功時清除 loadErr,並持續附加到最後一個存在的 log。

以 bufio.Reader.ReadBytes('\n') 讀行,行長不受限制。不使用 bufio.Scanner,因為它預設 64 KB 的行長上限曾讓一個 70 KB 的值使整個資料庫讀不出來。空行或格式錯誤的 JSON 行會略過;只有真正的讀取錯誤(例如 .snap 路徑其實是目錄)才讓重播失敗。

重播會重建帶過期與向量的 SET 項目,套用 DEL/EXPIRE/EXPIREAT/PERSIST,並預熱 JSON 值的解析快取。

備份與復原

相關頁面

EN