8 个不稳定版本 (3 个重大更改)

0.4.1 2023年8月18日
0.4.0 2023年8月17日
0.3.0 2023年8月12日
0.2.1 2023年8月2日
0.1.0-alpha.12022年8月7日

数据库接口 中排名第 628

Download history 1/week @ 2024-03-09 8/week @ 2024-03-30 2/week @ 2024-04-06

每月下载量 56

MIT 许可证

60KB
1.5K SLoC

dbstruct

从结构体派生数据库

Crates.io Crates.io API License 这是一个早期版本,API 大多数是稳定的,但可能仍会变化

通过定义结构体创建一个类型化的嵌入式数据库。通过获取器和设置器与数据库交互。选择数据库中缺失值如何表示。标准库类型 VecHashMapOption 有特殊的获取器和设置器来模拟其标准库功能。您可以从 vec 中推送和弹出。

从各种流行的键值数据库中选择,然后仅提供数据库路径来实例化结构体。或者传递任何实现 dbstruct::DataStore 的对象。

用例

  • 编写一个需要某种持久性的简单应用程序时,dbstruct 是理想的。
  • 当开发一个您以后可以替换的系统时,快速完成存储层。

示例

use std::path::Path;

#[dbstruct::dbstruct(db=sled)]
pub struct Test {
	#[dbstruct(Default)]
	the_awnser: u8,
	primes: Vec<u32>,
	#[dbstruct(Default="format!(\"{}\", 20+2+20)")]
	the_result: String,
}

fn main() {
	// a wrapper around a HashMap that implements the 
	// `DataStore` trait
	let db = Test::new(&Path::new("the_db")).unwrap();

	db.the_awnser().set(&42).unwrap();
	assert_eq!(42u8, db.the_awnser().get().unwrap());

	db.primes().push(&2).unwrap();
	db.primes().push(&3).unwrap();
	db.primes().push(&5).unwrap();
	db.primes().push(&7).unwrap();
	assert_eq!(Some(7), db.primes().pop().unwrap());

	assert_eq!(String::from("42"), db.the_result().get().unwrap());
}

开箱即用支持

名称 优势 属性选项
Sled 纯 Rust 数据库=sled
BTreeMap,不存储任何内容! 测试 数据库=btreemap

正在开发中:rocksdb

未来工作

以下是我计划工作的功能,不分先后顺序。如果您缺少任何内容,请通过 issue 告诉我

  • 迁移示例工作流程。
  • (禁用)允许从多个线程通过克隆结构体访问
  • 刷新数据库,可以通过结构体上的函数显式进行,也可以在字段更改时隐式进行。将通过结构体上的属性和特定字段进行配置。
  • 扩展包装 API,使其更接近其标准库对应物。
  • 异步支持刷新数据库。
  • 找出如何表示交易的方法(即使可能,也是非常困难的)

类似板条箱

  • SQLx
  • cornucopia 从您的 PostgreSQL 生成类型检查的 Rust。
  • losfair/RefineDB 一个在任意事务键值存储上运行的支持强类型的文档数据库
  • chronicl/typed-sled 基于 sled,提供了一个类似于 BTreeMap<K, V> 的 API。
  • sea-orm 一个关系型 ORM,帮助您在 Rust 中使用动态语言的熟悉度构建网络服务

依赖项

~2.8–8MB
~146K SLoC