Apache AGE:基于PostgreSQL的图数据库

Apache AGE(A Graph Extension)是一个基于 PostgreSQL 的图数据库。它以扩展插件的形式提供,可以在利用 PostgreSQL 先进的 SQL 查询功能和事务支持的同时,享受图数据库的灵活性和可扩展性。

Apache AGE 最初由 Bitnine Global Inc. 提供,目前已经成为了 Apache 软件基金会的顶级项目,使用 Apache License 2.0 开源协议。Apache AGE 的最终目标是为各种关系型数据库提供图数据处理和分析功能,包括 MySQL 和 MariaDB。

系统架构

下图是一个简化的 AGE 体系结构,整体上和 PostgreSQL 架构类似,每个组件都基于 PostgreSQL 事务缓存层和存储层。

每个组件负责的功能如下:

  1. 查询解析器负责解析 Cypher 查询,Apache AGE 使用 openCypher 语法实现;
  2. 查询转换器负责将 Cypher 查询转换为查询树,成为一个子查询节点;
  3. 查询优化器负责理解图操作并相关的执行计划节点;
  4. 执行器负责执行图操作相关的执行计划;
  5. Cypher 查询兼容 PostgreSQL 完整的事务功能(ACID)。

基于以上架构设计,Apache AGE 实现了以下功能:

  • 基于 PostgreSQL 数据库的图数据查询与可视化(Apache AGE Viewer);
  • 同时支持关系型数据和图数据的混合查询功能;
  • 快速索引和高效的图查询处理;
  • 图数据与关系型数据的可视化分析。

Apache AGE Viewer 是一个基于 Web 的用户接口,可以支持 Apache AGE 图数据的可视化和探索分析。

快速体验

安装 Apache AGE 最简单的方式就是使用 Docker 镜像。首先获取镜像:

bash 复制代码
docker pull apache/age

然后运行镜像:

bash 复制代码
docker run \
    --name myAge \
    -p 5455:5432 \
    -e POSTGRES_USER=postgresUser \
    -e POSTGRES_PASSWORD=postgresPW \
    -e POSTGRES_DB=postgresDB \
    -d \
    apache/age

其中的参数作用如下:

  • --name,指定容器的名称;
  • -p,将容器中的 PostgreSQL 端口(5432)映射到主机端口(5455);
  • -e,设置访问 PostgreSQL 数据库的环境变量;
  • -d,在后台运行容器并打印 ID。

然后通过以下命令连接到容器中的数据库:

bash 复制代码
docker exec -it myAge psql -d postgresDB -U postgresUser

使用 AGE 之前还需要加载插件,执行以下 PostgreSQL 命令:

sql 复制代码
CREATE EXTENSION age;

LOAD 'age';

SET search_path = ag_catalog, "$user", public;

接下来是一个使用图数据库功能的简单示例,首先使用 ag_catalog.create_graph 函数创建一个图:

sql 复制代码
SELECT * FROM ag_catalog.create_graph('new_graph');

然后使用 Cypher 查询创建一个节点:

sql 复制代码
SELECT * 
FROM ag_catalog.cypher('new_graph', $$
    CREATE (n)
$$) as (v agtype);

或者使用以下查询创建一个包含标签的节点:

sql 复制代码
SELECT * 
FROM cypher('new_graph', $$
    CREATE (:label)
$$) as (v agtype);

使用 MATCH 子句查询图中的节点

sql 复制代码
SELECT * 
FROM cypher('new_graph', $$
    MATCH (v)
    RETURN v
$$) as (v agtype);

使用以下语句为两个节点创建一个变:

sql 复制代码
SELECT * 
FROM cypher('new_graph', $$
    MATCH (a:label), (b:label)
    WHERE a.property = 'Node A' AND b.property = 'Node B'
    CREATE (a)-[e:RELTYPE]->(b)
    RETURN e
$$) as (e agtype);

应用开发

Apache AGE 支持各种主流编程语言,包括 Go、Java、NodeJs、Python、Rust、.Net。

具体示例可以参考文档:

https://github.com/apache/age?tab=readme-ov-file#language-specific-drivers

相关推荐
用户6279947182627 分钟前
南大通用GBase 8c分布式版本gha_ctl 命令-HI参数详解
数据库
斯汤雷15 分钟前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化
SQLplusDB22 分钟前
Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误
数据库·oracle·embedding
喝醉酒的小白43 分钟前
SQL Server 可用性组自动种子设定失败问题
数据库
chem41111 小时前
Conmon lisp Demo
服务器·数据库·lisp
m0_555762901 小时前
QT 动态布局实现(待完善)
服务器·数据库·qt
孪生质数-2 小时前
SQL server 2022和SSMS的使用案例1
网络·数据库·后端·科技·架构
振鹏Dong2 小时前
MySQL 事务底层和高可用原理
数据库·mysql
hycccccch3 小时前
RabbitMQ技术方案分析
数据库·rabbitmq
一人の梅雨3 小时前
化工网平台API接口开发实战:从接入到数据解析‌
java·开发语言·数据库