moonkv

基于 Bitcask 模型的高性能 Log-Structured 键值存储引擎
CCF OSC2026
MoonBit Track 1
系统架构设计

项目完全使用原生的 MoonBit 语言编写,深度契合 Bitcask 引擎的经典设计。支持高吞吐量的顺序写和内存索引机制。

客户端 Write Path
Put / Delete
↓ (顺序写)
WAL 日志文件 (Active & Read-Only)
0.data / 1.data (Append-Only)
↓ (加载重建 / Hint 文件加速)
内存索引 (Keydir Hash Map)
Key → FileID | ValSz | ValPos
↓ (合并压缩)
日志合并 (Compaction)
清除过期与墓碑数据,生成 Hint 索引
数据包头部格式 (28-Byte Binary Header)
// 紧凑的文件布局设计,包含校验和和 TTL 支持
checksum (4B) | timestamp (8B) | expires_at (8B) | key_sz (4B) | val_sz (4B) | key | value
核心技术特性

原子写事务 (Write Batch)

支持多操作单批次原子提交,自动写入提交标记,防崩溃后遗失。

生存时间 (TTL Expiration)

支持键级生存时间。内存中做 $O(1)$ 延迟清理,数据段压缩时物理清理。

快速冷启动 (Hint File Boot)

合并落盘时同步生成只包含元数据的 Hint 索引文件,加速索引构建。

数据安全性校验 (FNV-1a)

每次写入或启动加载都会对每条日志的 FNV-1a 哈希校验和进行完整验证。

程序 API 示例
// 开启数据库并执行写事务与 TTL 操作
let db = @moonkv.DB::open("data_dir", 1024 * 1024)

// 写入带有 TTL(逻辑时钟)的键值对
db.put_ttl("key", @moonkv.string_to_bytes("val"), 5L)

// 原子事务提交
let batch = db.new_write_batch()
batch.put("a", @moonkv.string_to_bytes("1"))
batch.delete("b")
batch.commit()