news 2026/2/3 7:38:24

图数据库这一篇就!!!

作者头像

张小明

前端开发工程师

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/3 6:18:20

【大前端】【iOS】iOS 真实项目可落地目录结构方案

一套 iOS 真实项目可落地目录结构方案,包含 模块拆分、命名规范、协作约束、演进路线。 目标: ✅ 新人 1 天能上手 ✅ 3–10 人并行开发不冲突 ✅ 支持后期组件化 / Swift Package 一、真实项目推荐总目录(MVVM 模块化) MyApp ├…

作者头像 李华
网站建设 2026/2/2 4:56:43

揭秘MCP服务发现:构建智能AI工具生态系统的核心技术

揭秘MCP服务发现:构建智能AI工具生态系统的核心技术 【免费下载链接】awesome-mcp-servers A collection of MCP servers. 项目地址: https://gitcode.com/GitHub_Trending/aweso/awesome-mcp-servers 在AI助手快速发展的今天,如何让AI模型安全高…

作者头像 李华
网站建设 2026/2/2 16:59:12

智能笔记管理:如何高效组织你的每日任务与灵感

智能笔记管理:如何高效组织你的每日任务与灵感 【免费下载链接】DailyNotes App for taking notes and tracking tasks on a daily basis 项目地址: https://gitcode.com/gh_mirrors/da/DailyNotes 每天面对繁杂的任务和零散的灵感,你是否也曾感到…

作者头像 李华
网站建设 2026/1/31 17:31:20

终极指南:如何快速掌握 My Mind 免费在线思维导图工具

终极指南:如何快速掌握 My Mind 免费在线思维导图工具 【免费下载链接】my-mind Online Mindmapping Software 项目地址: https://gitcode.com/gh_mirrors/my/my-mind My Mind 是一款功能强大的免费在线思维导图应用,专为需要高效整理思维的用户设…

作者头像 李华
网站建设 2026/1/31 17:45:34

Vim插件管理器VAM终极指南:从零开始构建高效开发环境

作为一名Vim用户,你是否曾经为插件管理而烦恼?插件依赖冲突、手动更新困难、启动速度缓慢……这些痛点正在阻碍你享受Vim带来的高效开发体验。今天,让我们一起来探索Vim插件管理器VAM,这款能够彻底改变你Vim使用方式的强大工具。 …

作者头像 李华