月壤:纯 MoonBit LSM-tree 嵌入式 KV 存储(WAL + 跳表 MemTable + SSTable + 合并压缩)。
名称取自月球表面覆盖的松散岩屑层「月壤」(lunar regolith)——写入如 月壤般层层堆积,压缩则如压实成岩。
moon add QYF795/regolith # 依赖方式使用(mooncakes.io 已发布)fn main raise {
let db = @QYF795/regolith.Db::open("data")
db.put(b"key", b"value")
println(db.get(b"key").to_string()) // Some(Some(b"value"))
db.flush() // 落盘确认
}moon test --target js
moon test --target wasm-gcmoon run --target js src/cli -- set hello regolith
moon run --target js src/cli -- get hello # regolith
moon run --target js src/cli -- scan
moon run --target js src/cli -- scan_prefix hel # hello=regolith
moon run --target js src/cli -- scan_range h i # hello=regolith
moon run --target js src/cli -- statsfn main raise {
let db = Db::open("demo-data") // 默认选项
db.put(b"key", b"value")
println(db.get(b"key").to_string()) // Some(Some(b"value"))
// 多键一次原子提交(全有或全无)
db.write(WriteBatch::new().put(b"a", b"1").delete(b"key"))
db.flush() // 主动落盘
// 快照:冻结当前状态;后续写入不影响快照上的读写
let snap = db.snapshot()
db.put(b"key", b"other")
println(snap.get(b"key").to_string()) // 仍是 Some(Some(b"value"))
snap.close() // 释放快照钉住的表文件
}src/ 引擎实现(WAL / MemTable / SSTable / Db / 合并迭代器 / CLI / demo)
tools/ 开发工具(sim_crash.py:崩溃一致性全状态模拟器)
docs/ [磁盘格式](docs/format.md) / [验收清单](docs/acceptance.md) / [设计文档](docs/design.md)pub(all) struct Bloom {
m_bits : Int
bits : Bytes
}pub(all) struct Db {
storage : Storage
opts : Options
memtable : MemTable
wal : Wal
next_seq : Ref[UInt64]
l0_counter : Ref[Int]
l0_names : Ref[Array[String]]
l0_readers : Ref[Array[SstReader]]
l1_seq : Ref[UInt64?]
l1_name : Ref[String?]
l1_reader : Ref[SstReader?]
l2_seq : Ref[UInt64?]
l2_name : Ref[String?]
l2_reader : Ref[SstReader?]
l1_bytes : Ref[Int]
l2_bytes : Ref[Int]
snapshots : Ref[Array[Snapshot]]
next_snap_id : Ref[UInt64]
pending : Ref[Array[String]]
}pub(all) struct FailpointStorage {
inner : MemoryStorage
armed_kind : Ref[FaultKind?]
armed_name : Ref[String?]
fired : Ref[Bool]
}fn FailpointStorage::arm_on(self : FailpointStorage, kind : FaultKind, name_prefix : String) -> Unitpub(all) struct FileStorage {
dir : String
}pub(all) struct Options {
memtable_limit : Int
block_size : Int
l0_compaction_trigger : Int
l2_size_trigger : Int
l2_size_ratio : Int
}pub(all) struct Stats {
memtable_bytes : Int
wal_bytes : Int
l0_files : Int
l1_files : Int
l1_bytes : Int
l2_files : Int
l2_bytes : Int
}fn crc32(data : BytesView) -> UIntfn crc32_init(data : BytesView, init : UInt) -> UIntInstall
Download zip月壤:纯 MoonBit LSM-tree 嵌入式 KV 存储(WAL + 跳表 MemTable + SSTable + 合并压缩)。