美文网首页
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

    rustbreak Github Crates.io 前言 持久化就是把数据保存到可掉电式存储设备中以供之后使用...

  • rust05模块

    库(crate) Rust中有四种库(crate):core crate(核心库)、std crate(标准库)、...

  • Rust Crate 使用:serde

    serde Github Crates.io 前言 序列化和反序列化是非常通用的功能,在网络传输,数据存储上极其...

  • Rust Crate 使用:structopt

    structopt Github Crates.io 前言 在前一篇介绍了命令行解析库clap,它支持函数调用模...

  • Rust Crate 使用:clap

    Clap Github Crates.io 前言 狠狠狠好用的库介绍。如果你对控制台情有独钟,必然会接触到命令行...

  • RUST AVR COMPILE

    https://book.avr-rust.com/004-flashing-a-crate-to-chip.ht...

  • [Rust] 导入和模块

    Rust中将传统的lib或者库称为 crate, 通常的包称为模块(module), 使用use关键字引用crat...

  • Rust Crate 使用:error-chain

    Error-chain Github crates.io 前言 错误和异常傻傻分不清,这里统称为错误吧。Rust ...

  • Rust Crate 使用:log4rs

    log4rs Github Crates.io 介绍 log4rs是一个高效的日志库框架,借鉴了 java 的 ...

  • Rust for cpp devs - 用 Packages C

    Rust 中包含三个不同层级的结构: package crate module package 是由一个或多个 c...

网友评论

      本文标题:Rust Crate 使用:rustbreak

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