Single-file page store. One writer, crash recovery from a write-ahead log.
import {
"Nanaloveyuki/vellum@0.4.1",
}import {
"Nanaloveyuki/vellum",
"moonbitlang/async",
}
pkgtype(kind: "executable")async fn main {
let db = @vellum.open("notes.db")
defer db.close()
let txn = db.begin()
txn.put(b"hello", b"vellum")
txn.commit()
db.close()
let again = @vellum.open("notes.db")
defer again.close()
let read = again.begin()
match read.get(b"hello") {
Some(value) => println(value.to_string())
None => println("missing")
}
read.abort()
}let txn = db.begin()
let cursor = txn.scan_prefix(b"notes/")
while cursor.next() is Some((key, value)) {
println("\{key}: \{value}")
}
txn.abort()moon run src/cmd/metadata --target native@vellum.migrate_v1("old.db", "converted.db")
let converted = @vellum.open("converted.db")| 工作负载 | 0.2.0 | 0.3.0 |
|---|---|---|
| 4096 键、32 字节值:5 万热点查询 | 186–190 | 15–17 |
| 同规模:1 万同值写入 | 74–77 | 16–19 |
| 4096 键、3000 字节值:约 16 MiB 建库提交 | 337–357 | 58–61 |
| 同规模:5 万随机查询 | 275–300 | 64–70 |
moon run src/cmd/bench --target native --releasemoon run src/cmd/scan_bench --target native --releaseset -eo pipefail
curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash -s -- "$(cat .moonbit-toolchain)"
export PATH="${MOON_HOME:-$HOME/.moon}/bin:$PATH"
moon version --all
moonc -v
moon updatemoon fmt --check
moon check --target native --deny-warn
moon test --target native
moon test src --target wasm-gcmoon run --target native --release src/cmd/main
moon run --target native --release src/cmd/bench
moon run --target native --release src/cmd/metadata
moon run --target native --release src/cmd/scan_benchpub struct Cursor {
// private fields
}pub struct Db {
// private fields
}pub struct Txn {
// private fields
}Install
Download zipSingle-file page store. One writer, crash recovery from a write-ahead log.