news 2026/2/26 4:47:32

图数据库这一篇就!!!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
图数据库这一篇就!!!

图数据库简介

图数据库(Graph Database)是以图结构存储和查询数据的非关系型数据库,核心通过节点(Node)、边(Edge)和属性(Property)表示数据关系。相比传统关系型数据库,图数据库擅长处理复杂关联关系,适用于社交网络、推荐系统、欺诈检测等场景。

常见图数据库类型

  • Neo4j:最流行的原生图数据库,支持Cypher查询语言。
  • ArangoDB:多模型数据库,支持图、文档和键值存储。
  • Amazon Neptune:全托管的图数据库服务,兼容Gremlin和SPARQL。

图数据库查询语句示例

Cypher(Neo4j)

创建节点和关系:

CREATE (a:Person {name: 'Alice', age: 30})-[:FRIENDS_WITH]->(b:Person {name: 'Bob'})

查询朋友关系:

MATCH (a:Person)-[:FRIENDS_WITH]->(b:Person) WHERE a.name = 'Alice' RETURN b.name
Gremlin(Apache TinkerPop)

遍历查询:

g.V().has('Person', 'name', 'Alice').out('FRIENDS_WITH').values('name')
SPARQL(RDF图)

查询RDF数据:

SELECT ?friend WHERE { ?alice rdf:type :Person . ?alice :name "Alice" . ?alice :FRIENDS_WITH ?friend . }

一、Neo4j(Cypher)—— 最主流的图数据库查询语言

1. 节点操作
(1)创建节点(含属性、标签)

cypher

// 创建单个节点(标签:Person,属性:姓名、年龄、城市) CREATE (p:Person {name: "张三", age: 30, city: "北京"}) RETURN p; // 批量创建节点 CREATE (p1:Person {name: "李四", age: 28, city: "上海"}), (p2:Company {name: "字节跳动", industry: "互联网", scale: "万人以上"});
(2)查询节点

cypher

// 按标签+属性筛选节点 MATCH (p:Person {city: "北京"}) WHERE p.age > 25 RETURN p.name, p.age; // 模糊查询(正则) MATCH (p:Person) WHERE p.name =~ "张.*" RETURN p;
(3)更新节点

cypher

// 修改属性 MATCH (p:Person {name: "张三"}) SET p.age = 31, p.job = "工程师" RETURN p; // 新增标签 MATCH (p:Person {name: "张三"}) SET p:Engineer RETURN p;
(4)删除节点

cypher

// 删除单个节点(需先删除关联边,否则报错) MATCH (p:Person {name: "李四"}) DETACH DELETE p;
2. 关系(边)操作
(1)创建关系(含属性)

cypher

// 给已有节点创建关系(张三→字节跳动,关系:WORKS_AT,属性:入职时间、职位) MATCH (p:Person {name: "张三"}), (c:Company {name: "字节跳动"}) CREATE (p)-[r:WORKS_AT {join_time: 2020, position: "后端开发"}]->(c) RETURN r; // 创建节点同时创建关系 CREATE (p:Person {name: "王五"})-[r:FRIEND_WITH {since: 2018}]->(q:Person {name: "赵六"}) RETURN p, r, q;
(2)查询关系

cypher

// 查询张三的工作关系 MATCH (p:Person {name: "张三"})-[r:WORKS_AT]->(c:Company) RETURN p.name, r.position, c.name; // 查询多跳关系(张三的朋友的朋友) MATCH (p:Person {name: "张三"})-[:FRIEND_WITH*2]->(f:Person) RETURN f.name;
(3)更新关系

cypher

MATCH (p:Person {name: "张三"})-[r:WORKS_AT]->(c:Company {name: "字节跳动"}) SET r.salary = 30000 RETURN r;
(4)删除关系

cypher

MATCH (p:Person {name: "张三"})-[r:WORKS_AT]->(c:Company) DELETE r;
3. 路径 / 聚合查询

cypher

// 最短路径(张三到字节跳动的最短路径) MATCH shortestPath((p:Person {name: "张三"})-[*]->(c:Company {name: "字节跳动"})) RETURN path; // 聚合统计(各城市的人数) MATCH (p:Person) RETURN p.city, COUNT(p) AS person_count ORDER BY person_count DESC;

二、NebulaGraph(nGQL)—— 分布式图数据库

1. 基础操作(需先创建空间、标签、边类型)

ngql

// 创建空间 CREATE SPACE IF NOT EXISTS my_space (vid_type=FIXED_STRING(30)); USE my_space; // 创建标签(节点类型) CREATE TAG IF NOT EXISTS Person (name string, age int, city string); // 创建边类型 CREATE EDGE IF NOT EXISTS WORKS_AT (join_time int, position string); // 插入节点(VID为自定义唯一标识) INSERT VERTEX Person(name, age, city) VALUES "p1":("张三", 30, "北京"), "p2":("李四", 28, "上海"); // 插入边(起点VID -> 终点VID) INSERT EDGE WORKS_AT(join_time, position) VALUES "p1"->"c1":(2020, "后端开发"); // 查询节点 MATCH (p:Person) WHERE p.age > 25 RETURN p.name, p.city; // 查询边 MATCH (p:Person)-[r:WORKS_AT]->(c:Company) RETURN p.name, r.position;

三、ArangoDB(AQL)—— 多模型数据库(支持图 + 文档)

aql

// 创建节点集合 CREATE COLLECTION Persons; // 创建边集合 CREATE COLLECTION WorksAt (type: EDGE); // 插入节点 INSERT {name: "张三", age: 30, city: "北京"} INTO Persons; INSERT {name: "字节跳动", industry: "互联网"} INTO Companies; // 插入边(_from/_to为节点的完整路径:集合名/文档ID) INSERT {_from: "Persons/123", _to: "Companies/456", join_time: 2020, position: "后端开发"} INTO WorksAt; // 查询(张三的工作关系) FOR p IN Persons FILTER p.name == "张三" FOR r IN WorksAt FILTER r._from == p._id FOR c IN Companies FILTER c._id == r._to RETURN {person: p.name, company: c.name, position: r.position};

应用场景

  • 实时推荐:基于用户行为图谱生成个性化推荐。
  • 路径分析:查找社交网络中最短路径或影响力传播路径。
  • 知识图谱:构建和查询复杂的实体关系网络。

图数据库通过高效的图遍历算法(如DFS、BFS)优化关联查询,适合需要频繁处理关系的场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/13 5:01:49

IfcOpenShell如何解决传统BIM工作流中的五大痛点?

在传统BIM项目中,设计师常常面临数据孤岛、格式兼容性差、工具链断裂等挑战。IfcOpenShell作为开源IFC库和几何引擎,通过模块化架构重新定义了BIM数据处理方式。不同于传统的单一工具链,它提供了一套完整的解决方案,让BIM协作变得…

作者头像 李华
网站建设 2026/2/14 15:37:37

5步构建Android视频播放器跨设备适配框架

5步构建Android视频播放器跨设备适配框架 【免费下载链接】ExoPlayer 项目地址: https://gitcode.com/gh_mirrors/ex/ExoPlayer 在移动应用开发领域,视频播放功能的多设备兼容性始终是技术团队面临的重大挑战。随着Android设备生态的碎片化程度不断加深&…

作者头像 李华
网站建设 2026/2/23 3:14:52

计算机专业大学生学网络安全:先学这 5 个方向,校招不踩坑

大学生学安全:先学这 5 个方向,校招不踩坑 “大一学 Nmap 扫端口,大二学 Burp 抓包,大三还在刷 CTF 题,临毕业发现简历上只有‘会用 XX 工具’,面试被问‘能解决什么实际问题’哑口无言”—— 这是多数大学…

作者头像 李华
网站建设 2026/2/25 7:58:02

给你规划大学四年任务,毕业即可从事网络安全工程师

前言 最近有很多小伙伴问我:零基础如何入门网络安全,他的梦想是成为网络安全工程师。我一问年龄:也就刚刚步入大一,这可是最好的时机,因为有足足四年的时光来做准备。 行业前景 网络安全行业的前景相信已经无须多言&a…

作者头像 李华
网站建设 2026/2/25 1:15:47

3步掌握MuJoCo无头渲染:云端服务器批量仿真可视化终极指南

3步掌握MuJoCo无头渲染:云端服务器批量仿真可视化终极指南 【免费下载链接】mujoco Multi-Joint dynamics with Contact. A general purpose physics simulator. 项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco 在云端服务器环境运行物理仿真时&a…

作者头像 李华
网站建设 2026/2/16 13:48:46

Unpaywall浏览器扩展:如何快速解锁付费学术论文

Unpaywall浏览器扩展:如何快速解锁付费学术论文 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-extension …

作者头像 李华