agnesoft/agdb_api

v0.9.0 2024-09-27 18:01 UTC

README

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()
            .elements::<User>()
            .search()
            .from("users")
            .where_()
            .key("name")
            .value(Equal("Bob".into()))
            .query(),
    )?
    .try_into()?;

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

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

agdb logo  功能特点

agdb

agdb_api

agdb logo  决策树

agdb logo  路线图

以下为计划中的功能

agdb logo  参考