当前位置: 首页 > article >正文

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 镜像。首先获取镜像:

docker pull apache/age

然后运行镜像:

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。

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

docker exec -it myAge psql -d postgresDB -U postgresUser

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

CREATE EXTENSION age;

LOAD 'age';

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

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

SELECT * FROM ag_catalog.create_graph('new_graph');

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

SELECT * 
FROM ag_catalog.cypher('new_graph', $$
    CREATE (n)
$$) as (v agtype);

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

SELECT * 
FROM cypher('new_graph', $$
    CREATE (:label)
$$) as (v agtype);

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

SELECT * 
FROM cypher('new_graph', $$
    MATCH (v)
    RETURN v
$$) as (v agtype);

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

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


http://www.kler.cn/a/428385.html

相关文章:

  • 大华相机DH-IPC-HFW3237M支持的ONVIF协议
  • 什么是COLLATE排序规则?
  • Effective Python系列(1.1):区别bytes和str
  • 【LeetCode】--- MySQL刷题集合
  • SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别
  • 计算机网络介质访问控制全攻略:从信道划分到协议详解!!!
  • 如何通过AI“一键生成PPT”提升工作效率与创意表达
  • vscode配置django环境并创建django项目(全图文操作)
  • DemoFusion 技术浅析(三):渐进式上采样
  • MR30分布式IO模块赋能喷水织机
  • 自动驾驶3D目标检测综述(五)
  • 【Python】报错:Statement seems to have no effect
  • 文件操作---文件IO与标准IO
  • ftp服务器搭建-安装、配置及验证
  • 使用Redis的Bitmap实现签到功能
  • Java项目实战II基于微信小程序的消防隐患在线举报系统(开发文档+数据库+源码)
  • Kafka 常见面试题深度解析
  • OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用
  • Ubuntu中配置交叉编译工具的三条命令的详细研究
  • 智能制造的加速器:RPA在制造业中的创新实践
  • 【Atcoder】【ABC383】B.Humidifier2题解
  • 使用Docker容器化部署Django项目:从零开始的最佳实践指南
  • Istio Ambient 模式中的透明流量拦截过程详解
  • Ubuntu中安装配置交叉编译工具并进行测试
  • Flink如何基于数据版本使用最新离线数据
  • Python 中的属性访问器是什么?如何使用 @property 装饰器?