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

相关推荐
Sayuanni%34 分钟前
Redis(初阶)
数据库·redis·缓存
jnrjian10 分钟前
Oracle TDE 大小钥匙 HSM DEK 与 EDB key.bin
数据库·oracle
todoitbo14 分钟前
报表总在扫大表,列存储应该放在哪一层
大数据·数据库·报表·国产数据库
瑞克-桑切斯16 分钟前
MySQL部署手册(5.7.20/8.0)
数据库·mysql
ss27331 分钟前
AI时代首先数据库-PostgreSQL实战笔记 | 19 PostgreSQL逻辑备份:pg_dump与pg_dumpall
数据库·笔记·postgresql
啵啵啵鱼34 分钟前
九、JDBC 操作 MySQL 数据库
android·数据库·mysql
handonch34 分钟前
MySQL → Kingbase PG模式 高频SQL替换清单
数据库·mysql·postgresql
姜鱼问生37 分钟前
Kuma SQLite 备份坑
数据库·sqlite
水无痕simon41 分钟前
15 MySQL是怎么保证高可用的?
数据库·mysql
漫步人生走在路上1 小时前
外贸SEO中的品牌词与产品词策略:大卖家和小卖家的不同打法
大数据·javascript·网络·数据库·人工智能·搜索引擎