9 个版本
使用旧的 Rust 2015
0.2.5 | 2021 年 6 月 24 日 |
---|---|
0.2.4 | 2020 年 9 月 16 日 |
0.2.3 | 2018 年 2 月 26 日 |
0.1.3 | 2018 年 2 月 22 日 |
#2674 在 数据库接口
每月 41 次下载
1.5MB
32K SLoC
包含 (混淆的 autotools 代码,530KB) vendor/gdbm-1.14.1/configure,(混淆的 autoconf 代码,7KB) vendor/gdbm-1.14.1/configure.ac
gnudbm
有关详细信息,请参阅文档。
本项目为轻量级本地键/值数据库 gdbm 提供了便捷和符合 Rust 风格的 Rust 绑定。它允许轻松存储和检索实现了 Serialize
和 Deserialize
的任何类型。
要求
默认情况下,此包包含最新的 gdbm 并将其构建为静态库。如果您想链接到系统 gdbm,请确保它是最新版本(1.14+)并且使用 system-gdbm
功能进行构建。
用法
首先,将以下内容添加到您的 Cargo.toml
[dependencies]
gnudbm = "0.2.3"
并添加到您的 crate 根目录下
extern crate gnudbm;
lib.rs
:
Gnudbm 是 gdbm 的一个便捷、符合 Rust 风格的包装器。
它内置了对 Serde 和 bincode 的支持,为实现了 Serialize
的任何类型提供快速且易于使用的地方键/值存储。
有关可用的数据库操作的概述,请参阅 RwHandle
的文档。
示例
使用 GdbmOpener
打开或创建数据库文件
let db_path = PathBuf::from("path/to/my.db");
let mut db = GdbmOpener::new()
.create(true)
// there are two types of database handle;
// the other is instantiated with `GdbmOpener::readonly`
.readwrite(&db_path)
.expect("db creation failed");
在检索和存储时,您的键可以是实现了 AsRef<[u8]>
的任何类型,例如 String
/&str
之一;值可以是实现了 Serialize
和 Deserialize
的任何类型。
// 'db' is a previously configured database
db.store("my key", "an important value").unwrap();
// fetch returns an Entry, which wraps a pointer to the raw data
let entry = db.fetch("my key").unwrap();
assert_eq!(entry.as_bytes(), "my key".as_bytes());
// the data can be deserialized, borrowing if possible.
// The result is bound to the lifetime of the Entry.
let as_str: &str = entry.deserialize().unwrap();
assert_eq!(as_str, "my key");
使用 Serde 自定义类型
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct MyStruct<'a> {
name: &'a str,
counts: Vec<u64>,
}
let name: String = "Colin".into();
let value = MyStruct {
name: &name,
counts: vec![4, 2, 0],
};
// 'db' is a previously configured database
db.store("my key", &value).unwrap();
let entry = db.fetch("my key").unwrap();
let fetched: MyStruct = entry.deserialize().unwrap();
assert_eq!(value.name, fetched.name);