4 个版本 (2 个破坏性更新)

使用旧的 Rust 2015

0.3.0 2017年2月23日
0.2.0 2017年2月15日
0.1.1 2017年1月17日
0.1.0 2016年12月21日

#119 in #in-memory

MIT 许可证

125KB
3.5K SLoC

Arthas 是一个内存结构数据库。

使用方法

  1. 将依赖项添加到 Cargo.toml

    [dependencies]
    arthas = "^0.3"
    arthas_derive = "^0.1"
    serde_derive = "^0.9"
    
  2. 在你的 main.rslib.rs

    extern crate arthas;
    #[macro_use]
    extern crate arthas_derive;
    #[macro_use]
    extern crate serde_derive;
    
  3. 将 "#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)]" 属性添加到你的结构体中。

    #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)]
    pub struct Article {
        pub _id: String,    // If you want to use id. add a field named `_id`.
        pub title: String,
        pub content: String,
        pub views: usize,
    }
    

CRUD 示例

所有结构体都可以使用静态方法 session()session() 将返回一个 Query

extern crate arthas;
#[macro_use]
extern crate arthas_derive;
#[macro_use]
extern crate serde_derive;

use arthas::prelude::*;

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)]
pub struct Article {
    pub _id: String,
    pub title: String,
    pub content: String,
    pub views: usize,
}

impl Article {
    pub fn new<T: Into<String>>(title: T) -> Article {
        Article { title: title.into(), ..Default::default() }
    }
}

fn main() {
    // Disable persistence for the tests.
    arthas::config::persistence(false);

    // Insert
    let id = Article::session().insert(Article::new("Hello world!")).unwrap();

    // Update
    Article::session().id(&id).update(|article| article.views = 10).unwrap();

    // Find
    let items = Article::session().find().unwrap();
    assert!(items.len() > 0);

    // Find One
    let item = Article::session().id(&id).find_one().unwrap();
    assert!(item.is_some());
    assert_eq!(item.unwrap().title, "Hello world!");

    // Remove
    Article::session().id(&id).remove().unwrap();
}

加载持久化

Arthas 不会自动从磁盘加载持久化,你必须自己加载持久化。

arthas::load::<Article>();  // Load `Article`'s persistence.

更新结构

有时你可能想更新你的结构。比如重命名或删除字段。Arthas 会自动删除和添加字段,但你必须告诉 Arthas 如果你想要 重命名 字段。

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)]
#[arthas(rename = "content = body, views = visit")] // Use `#[arthas]` attribute.
pub struct Article {
    pub _id: String,
    pub title: String,
    pub body: String,   // This is the field renamed from `content`
    pub visit: usize,   // This is the field renamed from `views`
}

依赖项

~9.5MB
~162K SLoC