12 个版本 (6 个稳定版)

2.0.0 2020 年 7 月 31 日
2.0.0-rc32018 年 8 月 13 日
2.0.0-rc22018 年 5 月 10 日
1.4.0 2017 年 10 月 12 日
0.2.1 2016 年 10 月 16 日

#207数据库实现

Download history 114/week @ 2024-03-24 192/week @ 2024-03-31 85/week @ 2024-04-07 120/week @ 2024-04-14 140/week @ 2024-04-21 116/week @ 2024-04-28 90/week @ 2024-05-05 101/week @ 2024-05-12 122/week @ 2024-05-19 113/week @ 2024-05-26 127/week @ 2024-06-02 66/week @ 2024-06-09 138/week @ 2024-06-16 95/week @ 2024-06-23 26/week @ 2024-06-30 55/week @ 2024-07-07

324 每月下载量
9 个crate中使用 (8 个直接使用)

MPL-2.0 许可证

88KB
1.5K SLoC

Rustbreak

Build Status Crates Link

文档

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