18 个不稳定版本 (5 个破坏性更新)
| 新功能 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.5.1 | 2023 年 9 月 19 日 | 
#77 在 #graph-database
每月 256 次下载
用于 agdb
19KB
105 行
agdb
图数据库。
 Agnesoft 图数据库
  Agnesoft 图数据库
Agnesoft 图数据库(简称 agdb)是一个持久的、可选内存映射的图数据库,具有原生对象 'no-text' 查询功能。它可以作为主要持久存储、数据分析平台以及快速的内存缓存使用。其无类型的数据存储允许灵活且无缝的数据更新,无需停机或昂贵的迁移。所有查询都通过构建器模式或直接作为对象构建,无需特殊语言或文本解析。
 主要功能
  主要功能
- 图上的数据
- 附加到图元素(节点和边)的具有类型的 键值属性
- 持久的平台无关基于文件的存储(可在平台之间传输)
- ACID 兼容
- 对象查询带有构建器模式(无文本,无查询语言)
- 内存映射以快速查询
- 服务器模式
- 任何编程语言的 OpenAPI 客户端
- 云托管 SaaS 数据库
- Db 本身没有依赖关系
 概述 [Db]
  概述 [Db]
cargo add agdb
基本用法演示,创建数据库,使用数据插入图元素,并使用选择和搜索查询它们。使用此代码的功能必须处理 agdb::DbError 和 agdb::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
| 功能 | 默认 | 描述 | 
|---|---|---|
| derive | yes | 启用 derive 宏,以使自定义用户类型可以直接与数据库一起使用。 | 
| opeanapi | no | 启用 ToSchema宏在查询结构体上,以便它们可以导出为 json OpenAPI/Swagger 架构。 | 
| serde | no | 使用 serde启用查询和 QueryResult 的序列化/反序列化。 | 
agdb_api
| 功能 | 默认 | 描述 | 
|---|---|---|
| reqwest | no | 使用 reqwest启用对 agdb API 客户端的HttpClient特质的引用实现。 | 
 决策树
  决策树
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 Studio | agdb的图形界面 | 
| Python 客户端 | 使用从 OpenAPI 生成的绑定生成的方便客户端。 | 
| Java 客户端 | 使用从 OpenAPI 生成的绑定生成的方便客户端。 | 
| C# 客户端 | 使用从 OpenAPI 生成的绑定生成的方便客户端。 | 
| C 客户端 | 使用从 OpenAPI 生成的绑定生成的方便客户端。 | 
| C++ 客户端 | 使用从 OpenAPI 生成的绑定生成的方便客户端。 | 
| 数据复制 & 一致性协议 | 通过将多个数据库节点连接起来,并使用 RAFT 协议允许复制。 | 
| Agdb Playground | 免费的基于云的公共游乐场,可以尝试 agdb。 | 
| #[no_std] | agdb不需要任何依赖,因此理论上应该是no_std友好的,但它可能需要一些开发和测试。 | 
| 公共云服务 | 托管在公共云中的商业和支持 agdb实例。 | 
 参考
  参考
依赖
~280–730KB
~17K SLoC








 
 
 
 
