Apache AGE
1. 概述
Apache AGE 是一个 PostgreSQL 扩展,为关系型数据库提供图数据库处理能力。AGE 代表 Adaptive Graph Engine(自适应图引擎),它将图数据库的功能引入 PostgreSQL,允许用户在同一数据库中同时使用关系模型和图模型。
Apache AGE 是 Apache 软件基金会的顶级项目,完全兼容 openCypher 查询语言(Neo4j 使用的图查询语言)。
核心特性:
| 特性 | 描述 |
|---|---|
openCypher 支持 |
完整支持 openCypher 查询语言,行业标准的图查询语言 |
混合数据库 |
在同一数据库中同时使用关系型和图数据模型 |
ACID 事务 |
继承 PostgreSQL 的完整 ACID 事务支持 |
SQL 集成 |
可将 Cypher 图查询与 SQL 查询无缝集成 |
属性图模型 |
支持带有属性的顶点和边的属性图模型 |
图遍历 |
高效的图遍历和模式匹配能力 |
免费开源 |
Apache 2.0 许可证,完全开源 |
2. 应用场景
-
社交网络分析(好友关系、关注关系、影响力分析)
-
知识图谱构建与推理
-
欺诈检测(金融交易网络分析)
-
推荐系统(基于关系链的推荐)
-
网络与 IT 基础设施管理
-
路径规划与物流优化
-
访问控制与权限管理
3. 安装
| 源码测试安装环境为 Ubuntu 24.04。 |
3.1. 依赖
# Ubuntu / Debian sudo apt install build-essential libreadline-dev zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev libxml2-utils xsltproc ccache libssl-dev pkg-config # 安装 AGE 依赖 sudo apt install python3 python3-pip python3-dev pip3 install antlr4-runtime4
4. 配置
5. 使用
要创建图,使用位于 ag_catalog 命名空间中的 create_graph 函数。
SELECT create_graph('graph_name');
要创建带有标签和属性的单个顶点,使用 CREATE 子句。
SELECT *
FROM cypher('graph_name', $$
CREATE (:label {property:"Node A"})
$$) as (v agtype);
SELECT *
FROM cypher('graph_name', $$
CREATE (:label {property:"Node B"})
$$) as (v agtype);
要在两个节点之间创建边并设置其属性:
SELECT *
FROM cypher('graph_name', $$
MATCH (a:label), (b:label)
WHERE a.property = 'Node A' AND b.property = 'Node B'
CREATE (a)-[e:RELTYPE {property:a.property + '<->' + b.property}]->(b)
RETURN e
$$) as (e agtype);
查询连接的节点:
SELECT * from cypher('graph_name', $$
MATCH (V)-[R]-(V2)
RETURN V,R,V2
$$) as (V agtype, R agtype, V2 agtype);
6. 管理命令
-- 列出所有图
SELECT * FROM ag_graph;
-- 删除图(删除所有相关顶点和边)
SELECT drop_graph('graph_name', true);
-- 查看图统计信息
SELECT
graph_name,
(SELECT count(*) FROM ag_vertex WHERE graph_id = ag_graph.graph_id) AS vertex_count,
(SELECT count(*) FROM ag_edge WHERE graph_id = ag_graph.graph_id) AS edge_count
FROM ag_graph;