itouKV
從零實作的 C++20 持久化鍵值儲存引擎
1 / 1:itouKV 預覽圖
專案介紹
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。這讓儲存流程與持久化契約維持在能完整理解、逐步驗證的範圍。