Skip to content

Commit 2e08a1a

Browse files
committed
docs: add Apache AGE documentation
1 parent 3b73750 commit 2e08a1a

8 files changed

Lines changed: 593 additions & 7 deletions

File tree

CN/modules/ROOT/nav.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@
5555
*** xref:master/ecosystem_components/pg_ai_query.adoc[pg_ai_query]
5656
*** xref:master/ecosystem_components/pg_partman.adoc[pg_partman]
5757
*** xref:master/ecosystem_components/pgbouncer.adoc[pgbouncer]
58+
*** xref:master/ecosystem_components/age.adoc[AGE]
5859
*** xref:master/ecosystem_components/pg_curl.adoc[pg_curl]
5960
*** xref:master/ecosystem_components/pg_textsearch.adoc[pg_textsearch]
6061
*** xref:master/ecosystem_components/pg_hint_plan.adoc[pg_hint_plan]
61-
*** xref:master/ecosystem_components/redis_fdw.adoc[redis_fdw]
62+
*** xref:master/ecosystem_components/redis_fdw.adoc[redis_fdw]
6263
* 监控运维
6364
** xref:master/getting-started/daily_monitoring.adoc[日常监控]
6465
** xref:master/getting-started/daily_maintenance.adoc[日常维护]
Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
1+
:sectnums:
2+
:sectnumlevels: 5
3+
4+
= Apache AGE
5+
6+
== 概述
7+
8+
Apache AGE 是一个 PostgreSQL 扩展,为关系型数据库提供图数据库处理能力。AGE 代表 *Adaptive Graph Engine*(自适应图引擎),它将图数据库的功能引入 PostgreSQL,允许用户在同一数据库中同时使用关系模型和图模型。
9+
10+
Apache AGE 是 Apache 软件基金会的顶级项目,完全兼容 openCypher 查询语言(Neo4j 使用的图查询语言)。
11+
12+
*核心特性:*
13+
14+
[cols="1,2"]
15+
|===
16+
| 特性 | 描述
17+
18+
| openCypher 支持
19+
| 完整支持 openCypher 查询语言,行业标准的图查询语言
20+
21+
| 混合数据库
22+
| 在同一数据库中同时使用关系型和图数据模型
23+
24+
| ACID 事务
25+
| 继承 PostgreSQL 的完整 ACID 事务支持
26+
27+
| SQL 集成
28+
| 可将 Cypher 图查询与 SQL 查询无缝集成
29+
30+
| 属性图模型
31+
| 支持带有属性的顶点和边的属性图模型
32+
33+
| 图遍历
34+
| 高效的图遍历和模式匹配能力
35+
36+
| 免费开源
37+
| Apache 2.0 许可证,完全开源
38+
|===
39+
40+
== 应用场景
41+
42+
* 社交网络分析(好友关系、关注关系、影响力分析)
43+
* 知识图谱构建与推理
44+
* 欺诈检测(金融交易网络分析)
45+
* 推荐系统(基于关系链的推荐)
46+
* 网络与 IT 基础设施管理
47+
* 路径规划与物流优化
48+
* 访问控制与权限管理
49+
50+
== 安装
51+
52+
[TIP]
53+
源码测试安装环境为 Ubuntu 24.04。
54+
55+
=== 依赖
56+
57+
[literal]
58+
----
59+
# Ubuntu / Debian
60+
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
61+
62+
# 安装 AGE 依赖
63+
sudo apt install python3 python3-pip python3-dev
64+
pip3 install antlr4-runtime4
65+
----
66+
67+
=== 从源码安装
68+
69+
[literal]
70+
----
71+
# 下载 Apache AGE 1.7.0 源码包
72+
wget https://github.com/apache/age/releases/download/PG18%2Fv1.7.0-rc0/apache-age-1.7.0-src.tar.gz
73+
74+
# 解压
75+
tar -xzf apache-age-1.7.0-src.tar.gz
76+
cd apache-age-1.7.0-src
77+
78+
# 编译安装
79+
make install
80+
81+
# 或指定 IvorySQL 安装路径
82+
make install PG_CONFIG=/usr/ivory-5/bin/pg_config
83+
----
84+
85+
=== 验证安装
86+
87+
[literal]
88+
----
89+
# 检查 AGE 扩展
90+
ls /usr/ivory-5/lib/age--*.so
91+
----
92+
93+
== 配置
94+
95+
=== 修改 IvorySQL 配置
96+
97+
编辑 `postgresql.conf` 或 `ivorysql.conf`:
98+
99+
[literal]
100+
----
101+
# 预加载 AGE 扩展(推荐)
102+
shared_preload_libraries = 'age'
103+
104+
# 或者在数据库级别加载(不需要重启)
105+
# shared_preload_libraries = ''
106+
----
107+
108+
[literal]
109+
----
110+
# 重启 IvorySQL 使配置生效
111+
# 使用 systemd
112+
sudo systemctl restart ivorysql-5
113+
114+
# 或手动重启
115+
pg_ctl restart -D /usr/ivory-5/data
116+
----
117+
118+
=== 创建扩展
119+
120+
连接到 IvorySQL 并创建 AGE 扩展:
121+
122+
[literal]
123+
----
124+
# 连接到数据库
125+
psql -U postgres -d postgres
126+
127+
# 创建 AGE 扩展
128+
CREATE EXTENSION age;
129+
130+
# 验证安装
131+
SELECT * FROM pg_extension WHERE extname = 'age';
132+
----
133+
134+
== 使用
135+
136+
=== 创建图数据库
137+
138+
[literal]
139+
----
140+
-- 加载 AGE 语言
141+
LOAD 'age';
142+
143+
-- 加载 Cypher 函数
144+
SET search_path = ag_catalog, "$user", public;
145+
146+
-- 创建图(graph)
147+
SELECT create_graph('graph_name');
148+
----
149+
150+
=== 创建顶点
151+
152+
创建带标签和属性的单个顶点:
153+
154+
[literal]
155+
----
156+
SELECT *
157+
FROM cypher('graph_name', $$
158+
CREATE (:label {property:"Node A"})
159+
$$) as (v agtype);
160+
----
161+
162+
[literal]
163+
----
164+
SELECT *
165+
FROM cypher('graph_name', $$
166+
CREATE (:label {property:"Node B"})
167+
$$) as (v agtype);
168+
----
169+
170+
=== 创建边
171+
172+
在两个节点之间创建边并设置属性:
173+
174+
[literal]
175+
----
176+
SELECT *
177+
FROM cypher('graph_name', $$
178+
MATCH (a:label), (b:label)
179+
WHERE a.property = 'Node A' AND b.property = 'Node B'
180+
CREATE (a)-[e:RELTYPE {property:a.property + '<->' + b.property}]->(b)
181+
RETURN e
182+
$$) as (e agtype);
183+
----
184+
185+
=== 查询图数据
186+
187+
查询连接的节点:
188+
189+
[literal]
190+
----
191+
SELECT * from cypher('graph_name', $$
192+
MATCH (V)-[R]-(V2)
193+
RETURN V,R,V2
194+
$$) as (V agtype, R agtype, V2 agtype);
195+
----
196+
197+
=== 基本查询示例
198+
199+
[literal]
200+
----
201+
-- 查询所有节点
202+
SELECT * FROM cypher('graph_name', $$
203+
MATCH (V)
204+
RETURN V
205+
$$) as (V agtype);
206+
207+
-- 查询特定标签的节点
208+
SELECT * FROM cypher('graph_name', $$
209+
MATCH (V:label)
210+
RETURN V
211+
$$) as (V agtype);
212+
213+
-- 查询特定属性的节点
214+
SELECT * FROM cypher('graph_name', $$
215+
MATCH (V:label {property: "Node A"})
216+
RETURN V
217+
$$) as (V agtype);
218+
219+
-- 查询所有边
220+
SELECT * FROM cypher('graph_name', $$
221+
MATCH ()-[R]->()
222+
RETURN R
223+
$$) as (R agtype);
224+
225+
-- 查询特定类型的边
226+
SELECT * FROM cypher('graph_name', $$
227+
MATCH ()-[R:RELTYPE]->()
228+
RETURN R
229+
$$) as (R agtype);
230+
----
231+
232+
=== 更新和删除
233+
234+
[literal]
235+
----
236+
-- 更新节点属性
237+
SELECT * FROM cypher('graph_name', $$
238+
MATCH (V:label {property: "Node A"})
239+
SET V.property = "Updated Node A"
240+
RETURN V
241+
$$) as (V agtype);
242+
243+
-- 删除边
244+
SELECT * FROM cypher('graph_name', $$
245+
MATCH (a:label {property: "Node A"})-[r:RELTYPE]->(b:label {property: "Node B"})
246+
DELETE r
247+
$$) as (r agtype);
248+
249+
-- 删除节点(必须先删除相关的边)
250+
SELECT * FROM cypher('graph_name', $$
251+
MATCH (V:label {property: "Node B"})
252+
DETACH DELETE V
253+
$$) as (V agtype);
254+
----
255+
256+
=== 与 SQL 结合使用
257+
258+
[literal]
259+
----
260+
-- 将图查询结果用于关系表查询
261+
SELECT * FROM cypher('graph_name', $$
262+
MATCH (V:label)
263+
RETURN V.property AS name
264+
$$) as (name text)
265+
WHERE name IS NOT NULL;
266+
267+
-- 统计节点数量
268+
SELECT count(*) FROM cypher('graph_name', $$
269+
MATCH (V)
270+
RETURN V
271+
$$) as (V agtype);
272+
----
273+
274+
== 管理命令
275+
276+
[literal]
277+
----
278+
-- 列出所有图
279+
SELECT * FROM ag_graph;
280+
281+
-- 删除图(删除所有相关顶点和边)
282+
SELECT drop_graph('graph_name', true);
283+
284+
-- 查看图统计信息
285+
SELECT
286+
graph_name,
287+
(SELECT count(*) FROM ag_vertex WHERE graph_id = ag_graph.graph_id) AS vertex_count,
288+
(SELECT count(*) FROM ag_edge WHERE graph_id = ag_graph.graph_id) AS edge_count
289+
FROM ag_graph;
290+
----

CN/modules/ROOT/pages/master/ecosystem_components/ecosystem_overview.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ IvorySQL 作为一款兼容 Oracle 且基于 PostgreSQL 的高级开源数据库
2525
| 12 | xref:master/ecosystem_components/pg_stat_monitor.adoc[pg_stat_monitor] | 2.3.1 | 收集性能统计数据,并通过统一视图和直方图形式直观展示查询性能指标。 | 性能监控
2626
| 13 | xref:master/ecosystem_components/pg_ai_query.adoc[pg_ai_query] | 0.1.1 | AI驱动的自然语言转SQL扩展,支持多种大语言模型 | AI辅助查询、自然语言数据库交互
2727
| 14 | xref:master/ecosystem_components/pg_partman.adoc[pg_partman] | 5.2 | 辅助管理原生分区表,自动创建、维护、清理分区子表 | 海量数据存储管理
28-
| 15 | xref:master/ecosystem_components/pgbouncer.adoc[pgbouncer] | x.x | |
28+
| 15 | xref:master/ecosystem_components/pgbouncer.adoc[pgbouncer] | 1.25.1 | PostgreSQL 轻量级连接池,提供连接复用和高效连接管理 | 高并发连接管理、连接复用、减少数据库连接开销
2929
| 16 | xref:master/ecosystem_components/pg_curl.adoc[pg_curl] | 2.4 | 基于 libcurl 的网络传输扩展,支持 HTTP/HTTPS、FTP、SMTP、IMAP 等二十余种协议,可在 SQL 中完成各类网络数据传输操作 | REST API 集成、邮件发送、文件传输、外部系统通知
3030
| 17 | xref:master/ecosystem_components/pg_textsearch.adoc[pg_textsearch] | 0.6.1 | 提供全文检索能力,支持文本分词、索引构建与高效全文查询 | 文档检索与内容搜索
3131
| 18 | xref:master/ecosystem_components/pg_hint_plan.adoc[pg_hint_plan] | PG18 | 通过SQL注释中的hints控制执行计划,在不修改SQL逻辑的情况下优化查询性能 | 查询性能优化、执行计划调优、数据库性能分析
3232
| 19 | xref:master/ecosystem_components/redis_fdw.adoc[redis_fdw] | PG18 | 将 Redis 数据映射为 PostgreSQL 外部表,支持通过标准 SELECT/INSERT/UPDATE/DELETE 语句读写 Redis | 统一 SQL 查询、轻量级数据同步、透明化缓存读写及跨库数据分析
33+
| 20 | xref:master/ecosystem_components/age.adoc[Apache AGE] | 1.7.0 | 为 IvorySQL 提供图数据库处理能力,支持 openCypher 查询语言,实现关系型与图数据库的混合使用 | 社交网络分析、知识图谱、欺诈检测、推荐系统、路径规划
3334
|====
3435

3536
这些插件均经过 IvorySQL 团队的测试和适配,确保在 IvorySQL 环境下稳定运行。用户可以根据业务需求选择合适的插件,进一步提升数据库系统的能力和灵活性。

CN/modules/ROOT/pages/master/ecosystem_components/pgbouncer.adoc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ sudo dnf install libevent-devel openssl-devel pkgconfig
4848

4949
[literal]
5050
----
51-
git clone https://github.com/pgbouncer/pgbouncer.git
52-
cd pgbouncer
51+
wget https://github.com/pgbouncer/pgbouncer/archive/refs/tags/pgbouncer_1_25_1.zip
52+
unzip pgbouncer_1_25_1.zip
53+
cd pgbouncer_1_25_1
5354
5455
./autogen.sh
5556

EN/modules/ROOT/nav.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
*** xref:master/ecosystem_components/pg_stat_monitor.adoc[pg_stat_monitor]
5656
*** xref:master/ecosystem_components/pg_partman.adoc[pg_partman]
5757
*** xref:master/ecosystem_components/pgbouncer.adoc[pgbouncer]
58+
*** xref:master/ecosystem_components/age.adoc[AGE]
5859
*** xref:master/ecosystem_components/pg_curl.adoc[pg_curl]
5960
*** xref:master/ecosystem_components/pg_textsearch.adoc[pg_textsearch]
6061
*** xref:master/ecosystem_components/pg_hint_plan.adoc[pg_hint_plan]

0 commit comments

Comments
 (0)