#tree #json #storage #str #basic #usize

nightly dino

恐龙是一个轻量级的 Rust 数据库!

3 个版本

0.1.2 2020年11月5日
0.1.1 2020年10月21日
0.1.0 2020年10月18日

#2080数据库接口

每月25 次下载

MIT/Apache

21KB
186

恐龙

Crates.io Crates.io Crates.io

Dino 是一个轻量级的 Rust 数据库!它使编写带类型的数据库更加容易。通常,如果您使用文件存储数据库,那么您将需要自己解析类型

恐龙使用 json,即您将拥有所有基本类型,如 boolusizestr 等,特殊之一是 Tree。恐龙对树特别关注。因为一些数据库允许您打开树,但不能在那里打开子树。您可以轻松打开子树。以下是一些示例,展示了如何使用树以及如何在没有子树的情况下使用数据库;)

示例代码

基本数据库

// Create the database instance
let mut db = Database::new("./basic.dino");

// Load and create the database if does not exist
db.load();

// Insert values in the db in the format of key, value
db.insert("key-1", "value-1");
db.insert("key-2", "value-2");

子树

// Create the database instance
let mut db = Database::new("./sub_trees.dino");

// Load and create the database if does not exist
db.load();

// Create a new sub Tree in the main Tree of the db
let mut data_tree = Tree::new();

// Insert the key and value in the sub tree
data_tree.insert("a", "b");

// Insert the [data_tree] under the main tree
db.insert_tree("id", data_tree);

查询数据库

// Create the database instance
let mut db = Database::new("./basic.dino");

// Load and create the database if does not exist
db.load();

// Insert values in the db in the format of key, value
db.insert("key-1", "value-1");

// Print the value of `key-1`
println!("The value of key: id is {}", db.find("key-1").unwrap());

rocket.rs 一起使用

// Simple rocket route
#[get("/<id>")]
// Here we add the arg `db: State<dino::Database>`
// To get the db state that we passed before!
fn hello(db: State<dino::Database>, id: String) -> String {
    // Now in this rocket route we take a id param
    // We will extract the param to str
    // Then check if it exists
    match db.find(id.as_str()) {
        // If it exists it will return Ok(value)
        Ok(value) => {
            // Then we can return the value!
            return value.to_string();
        }

        // If it does not exists it gives a error
        Err(error) => {
            // So return the error!
            // You might want to handle the error too!
            return error;
        }
    }
}

fn main() {
    // Create the database instance
    let mut db = dino::Database::new("rocket.dino");

    // Load and create the database if does not exist
    db.load();

    // Insert a key with a dummy value for now!
    db.insert("key", "value!");

    // Ignite the rocket and mount the routes
    rocket::ignite()
        .mount("/", routes![hello])
        // Important part here!
        // Here we pass the db state to rocket
        // So we can access it when we go to any route.
        .manage(db)
        .launch();
}

还有很多东西可以探索!所以查看 文档示例目录

贡献

贡献总是受欢迎!以下是一些您可以为恐龙做出贡献的方式

  1. 报告问题和错误
  2. 帮助我们完善文档
  3. 在恐龙中添加新功能并修复错误!

许可证

根据您的选择,受 Apache 许可证 2.0 版或 MIT 许可证的许可。除非您明确说明,否则您有意提交的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,而无需任何附加条款或条件。

依赖关系

~0.5–1MB
~20K SLoC