4个版本

0.0.4 2024年6月18日
0.0.3 2024年6月9日
0.0.2 2024年6月5日
0.0.1 2024年6月2日

#407数据库接口

每月 31 次下载

MIT 协议

80KB
1.5K SLoC

Deeb - JSON数据库

发音为 D-B,Deeb是一个适用于小型网站和快速原型设计的符合ACID的JSON数据库。

Deeb受到Mongo的灵活性和SQLite的轻量级的启发,是一个将一组JSON文件转换为数据库的工具。

Deeb将JSON文件组转换为数据库的能力允许您简单地打开json文件并根据需要编辑。

请参阅以下快速入门或文档以获取更多信息。

快速入门

  1. 将Deeb添加到您的Cargo.toml文件中
cargo add deeb
  1. 为您的数据库创建一个JSON文件。
echo '{"user": []}' > user.json
echo '{"comment": []}' > comment.json
  1. 创建Deeb实例并执行操作
use deeb::*;
use serde_json::json;
use anyhow::Error;

#[tokio::main]
async fn main() -> Result<(), Error> {
     // Set up a new Deeb instance
    let db = Deeb::new();

    // Create a new entity
    let user = Entity::from("user");
    let comment = Entity::from("comment");

    db.add_instance("test", "./user.json", vec![user.clone()])
        .await?;
    db.add_instance("test2", "./comment.json", vec![comment.clone()])
        .await?;

    // Single Operations
    db.insert(&user, json!({"id": 1, "name": "Joey", "age": 10}), None).await?;
    db.find_one(&user, Query::eq("name", "Joey"), None).await?;

    // Perform a transaction
    let mut transaction = db.begin_transaction().await;

    // Insert data into the database
    db.insert(&user, json!({"id": 1, "name": "Steve", "age": 3}), Some(&mut transaction)).await?;
    db.insert(&user, json!({"id": 2, "name": "Johnny", "age": 3}), Some(&mut transaction)).await?;

    db.insert(&comment, json!({"user_id": 1, "comment": "Hello"}), Some(&mut transaction)).await?;
    db.insert(&comment, json!({"user_id": 1, "comment": "Hi"}), Some(&mut transaction)).await?;

    // Query the database
    let query = Query::like("name", "Steve");
    let result = db.find_one(&user, query, Some(&mut transaction)).await?;

    // Update the database
    let query = Query::ne("name", "Steve");
    let update = json!({"name": "Steve", "age": 3});
    db.update_one(&user, query, update, Some(&mut transaction)).await?;

    // Delete from the database
    let query = Query::eq("name", "Johnny");
    db.delete_one(&user, query, Some(&mut transaction)).await?;

    db.commit(&mut transaction).await?;

    Ok(())
}

功能

  • ACID兼容:Deeb是一个符合ACID的数据库
  • 基于JSON:Deeb使用JSON文件作为数据库
  • 无模式:Deeb是无模式的
  • 事务:Deeb支持事务
  • 查询:Deeb支持查询、嵌套查询和组合查询。

路线图

  • 基本CRUD操作
  • 事务
  • 索引
  • 查询
  • 迁移
  • 基准测试
  • 关联
  • 文档
  • 测试
  • 示例
  • 日志记录
  • 错误处理
  • CI/CD

依赖项

~4–11MB
~103K SLoC