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

相关推荐
Boop_wu14 分钟前
[MySQL] 基础操作
数据库·mysql
6极地诈唬24 分钟前
【sqlite】xxx.db-journal是什么?
数据库·sqlite
小糖学代码2 小时前
MySQL:14.mysql connect
android·数据库·mysql·adb
爬山算法3 小时前
Redis(69)Redis分布式锁的优点和缺点是什么?
数据库·redis·分布式
RestCloud3 小时前
从数据库到价值:ETL 工具如何打通南大通用数据库与企业应用
数据库
惜月_treasure3 小时前
Text2SQL与工作流实现:让数据库查询变得轻松又高效
数据库·人工智能·python
-睡到自然醒~3 小时前
[go 面试] 并发与数据一致性:事务的保障
数据库·面试·golang
为乐ovo3 小时前
19.DCL-用户管理
数据库
一个天蝎座 白勺 程序猿4 小时前
金仓数据库KingbaseES实现MongoDB平滑迁移全攻略:从架构适配到性能调优的完整实践
数据库·mongodb·数据迁移·kingbasees·金仓数据库
武子康4 小时前
Java-153 深入浅出 MongoDB 全面的适用场景分析与选型指南 场景应用指南
java·开发语言·数据库·mongodb·性能优化·系统架构·nosql