2026/5/21 13:30:28
网站建设
项目流程
珠海网站建设服务,seo培训公司,做外贸需要网站,设计网站的流程一、介绍图数据库擅长处理复杂关联关系#xff0c;而 PostgreSQL 擅长事务型数据管理。Apache AGE 通过扩展方式将图数据库能力引入 PostgreSQL#xff0c;使其在保持原有稳定性与生态优势的同时#xff0c;补齐了图数据建模与查询能力的短板。这种“关系型数据库 图模型”…一、介绍图数据库擅长处理复杂关联关系而 PostgreSQL 擅长事务型数据管理。Apache AGE 通过扩展方式将图数据库能力引入 PostgreSQL使其在保持原有稳定性与生态优势的同时补齐了图数据建模与查询能力的短板。这种“关系型数据库 图模型”的融合架构为需要同时处理强事务与复杂关系的数据场景提供了一种务实且高性价比的技术路径。二、架构Apache AGE 是一个 PostgreSQL 的扩展用户能够在现有关系数据库中使用图数据库。AGE 是 A Graph Extension 的缩写。特点采用符合OpenCypher规范的查询解析器支持标准化的图查询语言将Cypher 查询语句转换为 PostgreSQL 可识别和执行的内部查询表示能够解析和理解图数据操作语义并生成对应的图查询执行计划按照生成的执行计划高效执行图查询与图计算操作在执行 Cypher 查询的同时完整继承PostgreSQL 的 ACID 事务特性确保数据一致性与可靠性。三、配置AGE插件安装Apache AGE图扩展插件#编译安装插件yum install gcc glibc glib-common readline readline-devel zlib zlib-devel flex bisonmake PG_CONFIG/usr/local/pgsql17/bin/pg_config install加载扩展插件#AGE这个插件与其他插件不同安装后。为了让数据库能够找到 AGE 的函数如 create_graph还需要设置搜索路径。create extension age; LOAD age;SET search_path ag_catalog, $user, public;四、图形在PostgreSQL中的存储形态在使用AGE创建图表时将为每个单独的图生成一个命名空间。 创建的图可以在ag_catalog命名空间的ag_graph表中查看graphid | name | namespace --------------------------------- 17012 | graph_dba | graph_dba 17034 | graph_test | graph_test创建图表后在图表的命名空间下将创建两个表来存储顶点和边_ag_label_vertex和_ag_label_edge这两个表作为点和边表的母表之后创建任何类型的点表和边表都继承该表。同时会将_ag_label_vertex和_ag_label_edge作为点和边表的信息插入ag_label中name→ 标签名称或内部标签名graph→ 图的唯一 IDid→ 标签唯一 IDkind→ v 节点或 e 边relation→ 底层 PostgreSQL 表名seq_name→ 自增序列名ID 自增用name | graph | id | kind | relation | seq_name ----------------------------------------------------------------------------------------- _ag_label_vertex | 17012 | 1 | v | graph_dba._ag_label_vertex | _ag_label_vertex_id_seq _ag_label_edge | 17012 | 2 | e | graph_dba._ag_label_edge | _ag_label_edge_id_seq Person | 17012 | 3 | v | graph_dba.Person | Person_id_seq FRIEND | 17012 | 4 | e | graph_dba.FRIEND | FATHER_id_seq节点表记录了节点的属性关系表则记录了点之间的联系select * from graph_dba.Person; id | properties --------------------------------------- 844424930131975 | {name: Jack} 844424930131976 | {name: Tom}select * from graph_dba.FRIEND; id | start_id | end_id | properties --------------------------------------------------------------------- 1407374883553282 | 844424930131975 | 844424930131976 | {since: 2015} 1407374883553283 | 844424930131976 | 844424930131975 | {since: 2015}五、语法解析5.1 Cypher语法节点(node) :图中的实体可以设置标签(Label)表示类型设置属性(Property)存储信息关系(Relationship):连接两个节点表示二者之间的联系. 拥有方向单向或者双向同样可以设置标签及属性核心语法MATCH匹配节点和关系、WHERE过滤条件。RETURN返回结果。5.2 SQL语法与Cypher语法的结合在 Apache AGE 中所有 Cypher 都必须通过 SQL 函数调用不能直接执行MATCH必须显式声明返回列结构。调用的Cypher语法必须使用$$包裹避免SQL Parser冲突SELECT * FROM cypher(graph_dba, //SQL调用Cypher函数查询图graph_dba$$ MATCH (n) //Cypher匹配所有节点 RETURN n$$) AS (n agtype); //返回JSON类型结果图操作1、创建删除SELECT * FROM ag_catalog.create_graph(graph_dba);SELECT * FROM ag_catalog.drop_graph(graph_dba, true); graphid | name | namespace --------------------------------- 17012 | graph_dba | graph_dba节点操作#创建多个点SELECT *FROM cypher( graph_dba, $$ UNWIND [ {name:zhang3}, {name:li4} ] AS row CREATE (p:Person { name: row.name }) RETURN p $$) AS (p agtype); p -------------------------------------------------------------------------------------- {id: 844424930131969, label: Person, properties: {name: zhang3}}::vertex {id: 844424930131970, label: Person, properties: {name: li4}}::vertex关系边操作#创建点之间的关系SELECT *FROM cypher( graph_dba, $$ MATCH (a:Person {name:zhang3}), (b:Person {name:li4}) MERGE (a)-[r:FRIENDS {since:2001}]-(b) RETURN r $$) AS (r agtype); r ------------------------------------------------------------------------------------------------------------------------------------------- {id: 1125899906842625, label: FRIENDS, end_id: 844424930131970, start_id: 844424930131969, properties: {since: 2001}}::edge查询#根据关系及关系的属性进行匹配查询SELECT *FROM cypher( graph_dba, $$ MATCH (a:Person {name:zhang3})-[r:FRIENDS]-(b:Person) WHERE r.since 2001 RETURN b $$) AS (b agtype); b ----------------------------------------------------------------------------------- {id: 844424930131970, label: Person, properties: {name: li4}}::vertex六、 应用样例用户在应用层提出自然语言查询。该问题首先传入LangChain 的 GraphCypherQAChain链内部调用LLM 引擎将自然语言自动转换为Cypher 查询语句。生成的 Cypher 查询通过AGE图实例AGEGraph发送到PostgreSQL Apache AGE 图数据库执行检索出对应的图结构数据节点、关系及属性。数据库返回的结果再次由 LLM 解析和整理最终以自然语言答案的形式返回给用户。from langchain_community.graphs.age_graph import AGEGraphfrom langchain.chains import GraphCypherQAChainfrom langchain_openai import ChatOpenAIdef main(): # 1. 配置并连接 Apache AGE 图数据库 conf { database: postgresDB, user: postgresUser, password: postgresPW, host: localhost, port: 5432, } # graph_name 是 AGE 中的具体图名称 graph AGEGraph(graph_nameage_test, confconf) # 2. 填充一些示例图数据如果数据库为空 graph.query( MERGE (m:Movie {name: Top Gun}) WITH m UNWIND [Tom Cruise, Val Kilmer, Anthony Edwards, Meg Ryan] AS actor MERGE (a:Actor {name: actor}) MERGE (a)-[:ACTED_IN]-(m) ) # 3. 使用 ChatOpenAI LLM 创建 LangChain 查询链 llm ChatOpenAI(temperature0) # 使用默认模型 chain GraphCypherQAChain.from_llm( llm, graphgraph, verboseTrue, allow_dangerous_requestsTrue ) # 4. 输入自然语言查询 question Who played in Top Gun? # 5. 执行链并输出结果 response chain.invoke(question) print(自然语言查询:, response[query]) print(生成答案:, response[result])if __name__ __main__: main()七、总结在 PostgreSQL 图数据库化的实践中Apache AGE 的引入为传统关系型数据库注入了强大的图计算能力。作为 PostgreSQL 的插件AGE 无需额外独立部署便可在熟悉的数据库环境中管理节点、关系及属性实现图数据的存储与查询。其原生支持 Cypher 查询语言使得图分析与知识图谱构建变得更为简便同时保留了 PostgreSQL 在事务管理、扩展性和生态兼容性方面的优势。如需启用或试用相关能力请联系 DBA 进行评估与支持。未来我们计划在此基础上引入更多 PostgreSQL 插件进一步拓展数据库的功能边界为企业数据应用提供更多可能性。云数据库产品提供一站式全生命周期数据库服务自助管理能力产品访问使用请联系官方客服。END360智汇云AI产品推荐大模型开发TLMhttps://zyun.360.cn/product/tlmAI标注平台TLPhttps://zyun.360.cn/product/tlpAI评测平台TEPhttps://console.zyun.360.cn/tepMCP市场MCPMKThttps://console.zyun.360.cn/mcpmkt智能体对话AIMIhttps://zyun.360.cn/product/aimi智能体记忆AMShttps://console.zyun.360.cn/ams/更多技术干货请关注“360智汇云开发者”360智汇云是以汇聚数据价值助力智能未来为目标的企业应用开放服务平台融合360丰富的产品、技术力量为客户提供平台服务。目前智汇云提供数据库、中间件、存储、大数据、人工智能、计算、网络、视联物联与通信等多种产品服务以及一站式解决方案。官网https://zyun.360.cn复制在浏览器中打开更多好用又便宜的云产品欢迎试用体验~添加工作人员企业微信get更快审核通道试用包哦~