12 个版本 (6 个稳定版)
2.0.0 | 2020 年 7 月 31 日 |
---|---|
2.0.0-rc3 | 2018 年 8 月 13 日 |
2.0.0-rc2 | 2018 年 5 月 10 日 |
1.4.0 | 2017 年 10 月 12 日 |
0.2.1 | 2016 年 10 月 16 日 |
#207 在 数据库实现 中
324 每月下载量
在 9 个crate中使用 (8 个直接使用)
88KB
1.5K SLoC
Rustbreak
Rustbreak 是一个受 Daybreak 启发的自包含文件数据库。它旨在快速且易于使用。将其添加到您的应用程序中,它应该就能为您正常工作。您唯一需要关心的事情就是保存。
何时使用它
这个库最初是因为需要能够快速编写一个需要持久性但仍然能够写入任意数据的 Rust 应用程序而开始的。
在 Ruby 中有 Daybreak,然而对于 Rust,直到现在还没有类似的 crate!
功能
- 简单易用、快速、安全
- 线程安全
- Serde 兼容的存储(包含 ron、bincode 或 yaml)
快速入门
将以下内容添加到您的 Cargo.toml
[dependencies.rustbreak]
version = "2"
features = ["ron_enc"] # You can also use "yaml_enc" or "bin_enc"
# Check the documentation to add your own!
extern crate rustbreak;
use std::collections::HashMap;
use rustbreak::{MemoryDatabase, deser::Ron};
fn main() -> rustbreak::Result<()> {
let db = MemoryDatabase::<HashMap<u32, String>, Ron>::memory(HashMap::new())?;
println!("Writing to Database");
db.write(|db| {
db.insert(0, String::from("world"));
db.insert(1, String::from("bar"));
});
db.read(|db| {
// db.insert("foo".into(), String::from("bar"));
// The above line will not compile since we are only reading
println!("Hello: {:?}", db.get(&0));
})?;
Ok(())
}
用法
用法相当简单
- 使用数据库构造函数之一创建/打开数据库
- 使用
FileDatabase::from_path
创建FileDatabase
。 - 使用
MemoryDatabase::memory
创建MemoryDatabase
。 - 使用
MmapDatabase::mmap
或带有mmap
功能的MmapDatabase::mmap_with_size
创建MmapDatabase
。 - 使用
Database::from_parts
创建Database
。
- 使用
- 从数据库中写入/读取数据
- 不要忘记定期运行
save
,或者在需要时运行。- 您可以在写入存储时并行保存到数据库。但是,在此期间将锁定写访问。
# use std::collections::HashMap;
use rustbreak::{MemoryDatabase, deser::Ron};
let db = MemoryDatabase::<HashMap<String, String>, Ron>::memory(HashMap::new(), Ron);
println!("Writing to Database");
db.write(|db| {
db.insert("hello".into(), String::from("world"));
db.insert("foo".into(), String::from("bar"));
});
db.read(|db| {
// db.insert("foo".into(), String::from("bar"));
// The above line will not compile since we are only reading
println!("Hello: {:?}", db.get("hello"));
});
编码
以下部分解释了如何启用相应的功能。您也可以同时启用多个。
Yaml
如果您想使用 yaml,则需要指定 yaml_enc
作为功能
[dependencies.rustbreak]
version = "1"
features = ["yaml_enc"]
您现在可以使用 rustbreak::deser::Yaml
作为反序列化结构。
Ron
如果您想使用ron
,则需要将ron_enc
指定为功能
[dependencies.rustbreak]
version = "1"
features = ["ron_enc"]
现在您可以使用rustbreak::deser::Ron
作为反序列化结构体。
Bincode
如果您想使用bincode,则需要将bin_enc
指定为功能
[dependencies.rustbreak]
version = "1"
features = ["bin_enc"]
现在您可以使用rustbreak::deser::Bincode
作为反序列化结构体。
依赖项
~2-12MB
~145K SLoC