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

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.lryc.cn/news/498698.html

相关文章:

  • RabbitMQ延迟消息的实现
  • SAP在中国:助力企业跨越成长的新篇章
  • 数据结构代码归纳
  • 数仓技术hive与oracle对比(一)
  • 筑起厂区安全--叉车安全防护装置全解析
  • 深入浅出云计算 ---笔记
  • ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义
  • SNMP 协议介绍
  • Python中的数据结构深入解析:从列表到字典的优化技巧
  • 如何利用Java爬虫获得商品类目
  • 力扣面试题 32 - 检查平衡性 C语言解法
  • 【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法
  • Implicit style-content separation using lora
  • ROS[aruco_ros+easy_handeye]手眼标定(眼在手外+UR10e+realsense-d435i)
  • 第九篇:k8s 通过helm发布应用
  • dataTable
  • json+Tomact项目报错怎么办?
  • Flume——sink连接Hive的参数配置(属性参数)
  • Netty面试内容整理-Netty 的应用场景
  • 波特图方法
  • 服务器数据恢复—硬盘掉线导致热备盘同步失败的RAID5阵列数据恢复案例
  • 在Ubuntu中运行和管理AppImage
  • 如何查看电脑的屏幕刷新率?
  • 浏览器数据存储方法深度剖析:LocalStorage、IndexedDB、Cookies、OPFS 与 WASM - SQLite
  • 面向金融场景的大模型 RAG 检索增强解决方案
  • 经典蓝牙(BT/EDR)蓝牙配对与连接
  • Flask: flask框架是如何实现非阻塞并发的
  • JAVA |日常开发中连接Oracle数据库详解
  • 头歌 进程管理之二(wait、exec、system的使用)
  • 详解日志格式配置:XML 与 Spring Boot 配置文件格式