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.1 | 2022年8月7日 |
在 数据库接口 中排名第 628
每月下载量 56 次
60KB
1.5K SLoC
dbstruct
从结构体派生数据库
通过定义结构体创建一个类型化的嵌入式数据库。通过获取器和设置器与数据库交互。选择数据库中缺失值如何表示。标准库类型 Vec
、HashMap
和 Option
有特殊的获取器和设置器来模拟其标准库功能。您可以从 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