#key-value-store #database #simple #embedded

no-std mhdb

纯Rust可嵌入的键值存储数据库

4个稳定版本

1.0.3 2020年6月21日

#162数据库实现

Apache-2.0

59KB
1.5K SLoC

Rust 861 SLoC // 0.1% comments C 574 SLoC // 0.1% comments

MHdb

Travis CI build status Crates.io latest version Crates.io downloads GitHub license

MHdb是一个基于dbm的纯Rust数据库实现。

请参阅库文档

变更日志

v1.0.3

  • 更新Cargo.toml

v1.0.2

  • 更新Cargo.toml

v1.0.1

  • 更新文档

v1.0.0

  • 首次发布

lib.rs:

MHdb是一个基于dbm的纯Rust嵌入式键值存储数据库。

简单使用

use mhdb::{Db, prelude::*};

let mut db = Db::open("mydb")?;
let key = "Number".to_owned();
let val = 42i32;

db.store(key.clone(), val)?;

let num: Option<i32> = db.fetch(42u8)?;
assert_eq!(num, Some(val));
println!("{}", num.unwrap());

任何实现了Datum的类型都可以存储在数据库中。

Datum

Datum表示数据库中的一个单个项目。因此,用作键和/或值的类型必须实现Datum特质。

Datum会自动在实现Serde特质SerializeDeserialize的任何类型上实现。

内存数据库

任何实现了Source特质类型都可以用作数据库源。该特质反过来也会自动在实现ReadWriteSeekSyncSend标准库特质的任何类型上实现。因此,可以将其用作内存数据库。

use mhdb::{Db, prelude::*};
use std::io::Cursor;

let dirf = Cursor::new(Vec::<u8>::new());
let pagf = Cursor::new(Vec::<u8>::new());
let mut db: Db = Db::with_sources(Box::new(pagf), Box::new(dirf))?;

db.store(42u8, "Hello world".to_owned())?;
let txt: Option<String> = db.fetch(42u8)?;
assert!(txt.is_some());
println!("{}", txt.unwrap());

限制

  • 键值对不能大于506B
  • Db对象不是线程安全的

依赖项

~240KB