agnesoft / agdb_api
Agnesoft 图形数据库 API 客户端 for PHP
Requires
- php: ^7.4 || ^8.0
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- guzzlehttp/guzzle: ^7.3
- guzzlehttp/psr7: ^1.7 || ^2.0
Requires (Dev)
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^8.0 || ^9.0
This package is auto-updated.
Last update: 2024-09-29 05:29:23 UTC
README
agdb
图形数据库。
Agnesoft 图形数据库
Agnesoft 图形数据库(简称 agdb)是一个持久、可选内存映射的图形数据库,具有原生的 '无文本' 对象查询。它可以作为主要持久存储、数据分析平台,以及快速内存缓存。其类型无模式的数据库存储允许在无停机或昂贵迁移的情况下灵活和无缝地更新数据。所有查询均通过构建器模式或直接作为对象构建,无需特殊语言或文本解析。
主要功能
- 在图上绘制的数据
- 附加到图元素(节点和边)的 键值属性
- 持久的平台无关的基于文件的存储(可在平台之间传输)
- 符合 ACID
- 对象查询 使用构建器模式(无文本,无查询语言)
- 内存映射以提高查询速度
- 服务器模式
- 任何编程语言的 OpenAPI 客户端
- 云 主机 SaaS 数据库
- 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() .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
agdb_api
决策树
路线图
以下为计划中的功能