news 2026/8/31 6:40:11

图数据库这一篇就!!!

作者头像

张小明

前端开发工程师

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/8/30 3:09:02

Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透

文章目录 Vue 事件机制全面解析:原生事件、自定义事件与 DOM 冒泡完全讲透1.Vue事件的核心机制1.1 原生事件(native events)1.2 子组件自定义事件(子组件 emit)1.3 浏览器 DOM 的事件冒泡机制 2.事件相关的实用补充2.4…

作者头像 李华
网站建设 2026/8/31 5:50:41

从零开始掌握SECS/GEM通信:secsgem终极入门指南

从零开始掌握SECS/GEM通信:secsgem终极入门指南 【免费下载链接】secsgem Simple Python SECS/GEM implementation 项目地址: https://gitcode.com/gh_mirrors/se/secsgem 在半导体制造领域,设备与主机之间的高效通信是实现自动化生产的关键。sec…

作者头像 李华
网站建设 2026/8/30 22:19:19

Harmony之路:性能优化(上)——渲染性能与懒加载

Harmony之路:性能优化(上)——渲染性能与懒加载从卡顿到丝滑,掌握HarmonyOS性能优化的核心利器在上一篇中,我们深入学习了权限管理,保障了应用的安全与隐私。现在,让我们聚焦性能优化——这是决…

作者头像 李华
网站建设 2026/8/29 23:12:28

Spyder多语言开发终极指南:一体化工具完全手册

Spyder多语言开发终极指南:一体化工具完全手册 【免费下载链接】spyder Official repository for Spyder - The Scientific Python Development Environment 项目地址: https://gitcode.com/gh_mirrors/sp/spyder 还在为不同编程项目频繁切换开发环境而头疼吗…

作者头像 李华
网站建设 2026/8/31 6:14:43

跨平台书签同步终极指南:告别设备切换的烦恼

跨平台书签同步终极指南:告别设备切换的烦恼 【免费下载链接】BookmarkHub BookmarkHub , sync bookmarks across different browsers 项目地址: https://gitcode.com/gh_mirrors/bo/BookmarkHub 你是否遇到过这样的困扰:在办公室电脑收藏的重要资…

作者头像 李华