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 次下载

MIT 许可证

1.5MB
32K SLoC

C 14K SLoC // 0.1% comments M4 9K SLoC // 0.2% comments Shell 7.5K SLoC // 0.2% comments Rust 1K SLoC // 0.1% comments Happy 320 SLoC Automake 267 SLoC // 0.3% comments AWK 55 SLoC // 0.2% comments

包含 (混淆的 autotools 代码,530KB) vendor/gdbm-1.14.1/configure,(混淆的 autoconf 代码,7KB) vendor/gdbm-1.14.1/configure.ac

gnudbm

有关详细信息,请参阅文档

本项目为轻量级本地键/值数据库 gdbm 提供了便捷和符合 Rust 风格的 Rust 绑定。它允许轻松存储和检索实现了 SerializeDeserialize 的任何类型。

要求

默认情况下,此包包含最新的 gdbm 并将其构建为静态库。如果您想链接到系统 gdbm,请确保它是最新版本(1.14+)并且使用 system-gdbm 功能进行构建。

用法

首先,将以下内容添加到您的 Cargo.toml

[dependencies]
gnudbm = "0.2.3"

并添加到您的 crate 根目录下

extern crate gnudbm;

lib.rs:

Gnudbm 是 gdbm 的一个便捷、符合 Rust 风格的包装器。

它内置了对 Serdebincode 的支持,为实现了 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 之一;值可以是实现了 SerializeDeserialize 的任何类型。

// '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);

依赖关系