22个不稳定版本 (7个破坏性更新)

0.8.0 2024年8月11日
0.7.2 2024年7月14日
0.7.0 2024年6月18日
0.6.8 2024年3月16日
0.3.0 2023年7月23日

#101 in 数据库接口

Download history 106/week @ 2024-05-13 29/week @ 2024-05-20 3/week @ 2024-05-27 9/week @ 2024-06-03 14/week @ 2024-06-10 152/week @ 2024-06-17 7/week @ 2024-06-24 140/week @ 2024-07-08 103/week @ 2024-07-15 9/week @ 2024-07-22 215/week @ 2024-07-29 72/week @ 2024-08-05 62/week @ 2024-08-12

每月下载量359
用于 2 crates

Apache-2.0

670KB
16K SLoC

agdb logo

agdb

图数据库。


db       api       studio       server       cloud

rust ts js js python java c cpp csharp

license Crates.io release coverage codecov

agdb logo  Agnesoft 图数据库

快速入门Db | 快速入门客户端 | 查询 | 决策树

为何不是SQL?

Agnesoft 图数据库(又称 agdb)是一种持久、可选内存映射的图数据库,具有原生对象'无文本'查询。它可以作为主要持久存储、数据分析平台,以及快速内存缓存。其类型无模式的数据存储允许灵活且无缝地更新数据,无需停机或昂贵的迁移。所有查询均通过构建模式或直接作为对象构建,无需特殊语言或文本解析。

agdb logo  关键特性

agdb logo  快速浏览 [Db]

cargo add agdb

基本用法演示:创建数据库,插入带数据的数据图表元素,并使用选择和搜索查询它们。使用此代码的功能必须处理 agdb::DbErroragdb::QueryError 错误类型以使操作符 ? 运行

use agdb::{Db, DbId, QueryBuilder, UserValue, DbUserValue, Comparison::Equal};

let mut db = Db::new("db_file.agdb")?;

db.exec_mut(&QueryBuilder::insert().nodes().aliases("users").query())?;

#[derive(Debug, UserValue)]
struct User { db_id: Option<DbId>, name: String, }
let users = vec![User { db_id: None, name: "Alice".to_string(), },
                 User { db_id: None, name: "Bob".to_string(), },
                 User { db_id: None, name: "John".to_string(), }];

let users_ids = db.exec_mut(&QueryBuilder::insert().nodes().values(&users).query())?;

db.exec_mut(
    &QueryBuilder::insert()
        .edges()
        .from("users")
        .to(&users_ids)
        .query(),
)?;

此代码创建了一个名为 user_db.agdb 的数据库,其中包含一个简单的包含4个节点的图表。第一个节点别名为 users,然后Alice、Bob和John的3个用户节点通过边连接到 users 节点。任意的 name 属性附加到用户节点。我们不是直接使用键插入值(这也是可能的),而是使用我们自己的类型并从 agdb::UserValue 继承,以便它可以与数据库一起使用。

您可以通过其ID选择图表元素(节点和边),以获取与其关联的数据(键值属性)。让我们选择我们的用户并将结果转换为列表(请注意,我们只选择与我们的 User 类型相关的值,通过传递 User::db_keys()

let users: Vec<User> = db
    .exec(
        &QueryBuilder::select()
            .values(User::db_keys())
            .ids(&users_ids)
            .query(),
    )?
    .try_into()?;

println!("{:?}", users);
// [User { db_id: Some(DbId(2)), username: "Alice" },
//  User { db_id: Some(DbId(3)), username: "Bob" },
//  User { db_id: Some(DbId(4)), username: "John" }]

您还可以根据条件在图表中进行搜索,以仅获取某些元素。例如

let user: User = db
    .exec(
        &QueryBuilder::select()
            .values(User::db_keys())
            .ids(
                QueryBuilder::search()
                    .from("users")
                    .where_()
                    .key("name")
                    .value(Equal("Bob".into()))
                    .query(),
            )
            .query(),
    )?
    .try_into()?;

println!("{:?}", user);
// User { db_id: Some(DbId(3)), username: "Bob" }

有关数据库概念和基本数据类型,请参阅 概念。有关所有查询的全面概述,请参阅 查询 参考或继续使用更深入的 高效agdb

agdb logo  Crate特性

agdb

特性 默认值 描述
derive 启用 derive 宏以允许自定义用户类型直接与数据库一起使用。
opeanapi 启用查询结构上的 ToSchema 宏,以便可以将它们导出为json OpeanAPI/Swagger模式。
serde 启用使用 serde 进行查询和 QueryResult 的序列化/反序列化。

agdb_api

特性 默认值 描述
reqwest 启用使用 reqwest 实现agdb API客户端的 HttpClient 特性的引用实现。

agdb logo  决策树

flowchart TD;
    A[Embedded or server?] --> Embedded
    A --> B[Client or hosting?]
    Embedded --> Studio[<a href='https://github.com/agnesoft/agdb/blob/main/docs/studio.md'>Studio</a>]
    Embedded --> Queries[<a href='https://github.com/agnesoft/agdb/blob/main/docs/queries.md'>Queries</a>]
    B --> Client
    B --> Hosting
    Client --> API[<a href='https://github.com/agnesoft/agdb/blob/main/docs/api.md'>API</a>]
    Client --> Studio
    Client --> Queries
    Hosting --> Server[<a href='https://github.com/agnesoft/agdb/blob/main/docs/server.md'>Server</a>]
    Hosting --> Cloud[<a href='https://github.com/agnesoft/agdb/blob/main/docs/cloud.md'>Cloud</a>]

agdb logo  路线图

以下为计划中的功能

特性 描述
Agdb Studio agdb的图形界面
Python 客户端 使用从OpenAPI生成的绑定提供的便捷客户端。
Java 客户端 使用从OpenAPI生成的绑定提供的便捷客户端。
C# 客户端 使用从OpenAPI生成的绑定提供的便捷客户端。
C 客户端 使用从OpenAPI生成的绑定提供的便捷客户端。
C++ 客户端 使用从OpenAPI生成的绑定提供的便捷客户端。
数据复制与共识协议 通过使用RAFT协议连接多个数据库节点来允许复制。
Agdb Playground 免费的公共云基础平台,可以用于对agdb进行实验。
#[no_std] agdb不依赖于任何依赖项,因此理论上应该对no_std友好,但可能需要一些开发和测试。
公共云服务 在公共云上托管的商业支持agdb实例。

agdb logo  参考

依赖项

~0–520KB
~10K SLoC