←返回上一頁

itouKV

從零實作的 C++20 持久化鍵值儲存引擎

專案介紹

itouKV 是從零實作的 C++20 持久化 key-value 儲存引擎,提供可嵌入程式的函式庫與獨立 CLI,沒有外部 C++ 套件依賴。除了讀寫文字,也能保存包含 NUL、非 UTF-8 等任意位元組的 key 和 value。

從寫入到恢復

修改資料時,會先將操作寫進 WAL 並完成持久化 flush,再更新記憶體狀態、回傳成功。重新開啟資料庫時,會檢查紀錄的長度、序號與 checksum,恢復已保存的狀態。

WriteBatch 可以把多次新增、修改與刪除包成同一次提交:共用一筆 WAL、序號與 flush,恢復時整批存在或整批不存在,讀取也不會看到只發布一部分的結果。

查詢與資料整理

  • MemTable 保存較新的值與刪除標記。
  • 不可變 SSTable 將整理過的資料留在磁碟,透過 Bloom filter 和稀疏索引減少查找工作。
  • 範圍掃描合併記憶體與磁碟的有序資料,讓新版本覆蓋舊版本。
  • 手動 compaction 產生新的 SSTable 與 WAL,再以原子 manifest 切換資料世代,最後清除舊檔案。

同一個 Store 可供多執行緒呼叫;資料夾則以作業系統的排他鎖限制同時開啟,程序結束後會釋放鎖。

驗證與目前範圍

測試包含與參考模型比對、二進位資料、批次可見性、檔案截斷與損毀,以及直接終止 CLI 後的恢復。另有獨立的格式驗證與故障點測試,確認 WAL 和 compaction 各階段的行為。

目前使用單層 SSTable 與手動 compaction,操作以同一把 mutex 序列化;尚未實作 MVCC、多層 LSM、背景 compaction 或 read-modify-write transaction。這讓儲存流程與持久化契約維持在能完整理解、逐步驗證的範圍。