Rust Crate 使用:rustbreak

rustbreak

Github
Crates.io

前言

持久化就是把数据保存到可掉电式存储设备中以供之后使用。通常是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、xml数据文件中。

介绍

RustBreak是一个简单、快速、线程安全的轻量数据库。开箱即用,你只要关心存储内容。

RustBreak支持三种数据序列化方式:ron、bincode 、yaml。

在某个应用程序中,将对部分数据持久化操作,并且任意数据格式的,可以考虑使用这个库。

使用

通用流程:

  1. 创建或打开数据库。 可以是文件数据库、内容数据库、Mmap数据库等。
  2. 对数据库的读写操作。
  3. 同步数据库。

实例

实验目的,持久化HashMap数据到文件中。

cargo.toml文件中添加包:

[dependencies]
failure = "0.1.6"
serde = "1.0.23"
rustbreak = { git = "https://github.com/TheNeikos/rustbreak", features = ["ron_enc"] }

main.rs文件中实现:

use std::{
    collections::HashMap,
    sync::Arc
};
use serde::{Serialize, Deserialize};
use rustbreak::{
    FileDatabase,
    deser::Ron
};


#[derive(Eq, PartialEq, Debug, Serialize, Deserialize, Clone)]
enum Country {
    Italy, UnitedKingdom
}

#[derive(Eq, PartialEq, Debug, Serialize, Deserialize, Clone)]
struct Person {
    name: String,
    country: Country,
}

fn main() -> Result<(), failure::Error> {
    let db = Arc::new(FileDatabase::, Ron>::from_path("test.ron", HashMap::new())?);

    println!("Loading Database");
    db.load()?;

    println!("Writing to Database");
    let db1 = db.clone();
    let t1 = std::thread::spawn(move || {
        db1.write(|db| {
            db.insert("fred".into(), Person {
                name: String::from("Fred Johnson"),
                country: Country::UnitedKingdom
            });
        }).unwrap();
    });
    
    let db2 = db.clone();
    let t2 = std::thread::spawn(move || {
        db2.write(|db| {
            db.insert("john".into(), Person {
                name: String::from("John Andersson"),
                country: Country::Italy
            });
        }).unwrap();
    });

    t1.join().unwrap();
    t2.join().unwrap();

    println!("Syncing Database");
    db.save()?;

    db.read(|db| {
        println!("Results:");
        println!("{:#?}", db.get("john".into()));
    })?;
    
    Ok(())
}

首先定义Country枚举类型和Person结构,并实现序列化。

接着启动两个线程插入数据。

输出文件:

{
    "fred": (
        name: "Fred Johnson",
        country: UnitedKingdom,
    ),
    "john": (
        name: "John Andersson",
        country: Italy,
    ),
}

你可能感兴趣的:(Rust Crate 使用:rustbreak)