美文网首页
Rust Crate 使用:rustbreak

Rust Crate 使用:rustbreak

作者: kayryu | 来源:发表于2019-12-02 21:34 被阅读0次

    rustbreak

    Github
    Crates.io

    前言

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

    介绍

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

    RustBreak支持三种数据序列化方式:ronbincodeyaml

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

    使用

    通用流程:

    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::<HashMap<String, Person>, 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

          本文链接:https://www.haomeiwen.com/subject/pkqqgctx.html