【图数据库与知识图谱入门】2.5 主流图数据库产品生态一览(Neo4j, JanusGraph, Nebula Graph, TigerGraph等)

【图数据库与知识图谱入门】2.5 主流图数据库产品生态一览(Neo4j, JanusGraph, Nebula Graph, TigerGraph等)

文章目录

2.5 主流图数据库产品生态一览(Neo4j, JanusGraph, Nebula Graph, TigerGraph等)

图数据库作为承载和处理关联数据的核心载体,已形成丰富的产品生态。

  • 根据开源属性、部署架构、性能定位的不同,主流产品可分为 轻量易用型、分布式开源型、超大规模国产型、商业高性能型四大类,以下将逐一详解并补充实战代码。

一、Neo4j:轻量易用的原生图数据库标杆

1. 核心概述

Neo4j是目前市场占有率最高的开源原生图数据库,由Neo4j Inc.开发维护,分为社区版(免费开源)和企业版(商业付费,支持集群、高可用等高级特性)。

  • 它采用原生图存储引擎,完美支持属性图模型,拥有简洁直观的Cypher查询语言,上手门槛极低,非常适合中小规模图数据场景的快速落地

2. 关键特性

  • 原生图存储:直接以节点、关系、属性的形式存储数据,无需进行关系型数据的范式转换,查询关联数据时性能远超关系型数据库。
  • 强大的可视化:自带Neo4j Browser可视化工具,可直观展示图数据的拓扑结构,方便调试和分析。
  • 完善的生态:支持Java、Python、Go等多种编程语言驱动,拥有丰富的插件市场(如全文索引、图算法库等)。

3. 适用场景

  • 中小规模知识图谱构建、社交网络关系分析、电商商品推荐、小型风控系统、学术研究原型验证

4. 实战代码(Cypher语言 + Python驱动)

(1)环境准备
  • 安装Neo4j社区版:可通过Docker快速部署(docker run -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/123456 neo4j:5.18.0)。
  • 安装Python驱动:pip install neo4j
(2)核心操作代码
from neo4j import GraphDatabase # 1. 连接Neo4j数据库classNeo4jClient:def__init__(self, uri, user, password): self.driver = GraphDatabase.driver(uri, auth=(user, password))defclose(self): self.driver.close()# 2. 创建节点(用户节点和商品节点)defcreate_nodes(self):with self.driver.session()as session:# 创建用户节点 session.run(""" CREATE (u1:User {id: 1, name: "张三", age: 25, city: "北京"}) CREATE (u2:User {id: 2, name: "李四", age: 30, city: "上海"}) CREATE (g1:Goods {id: 101, name: "智能手机", price: 4999, category: "数码产品"}) CREATE (g2:Goods {id: 102, name: "无线耳机", price: 799, category: "数码配件"}) """)print("节点创建成功!")# 3. 创建关系(用户-购买-商品)defcreate_relationships(self):with self.driver.session()as session:# 分别执行每个关系创建操作 session.run(""" MATCH (u:User {id: 1}), (g:Goods {id: 101}) CREATE (u)-[r:BUY {buy_time: "2025-12-01", amount: 1, payment: "微信"}]->(g) """) session.run(""" MATCH (u:User {id: 1}), (g:Goods {id: 102}) CREATE (u)-[r:BUY {buy_time: "2025-12-05", amount: 2, payment: "支付宝"}]->(g) """) session.run(""" MATCH (u:User {id: 2}), (g:Goods {id: 101}) CREATE (u)-[r:BUY {buy_time: "2025-12-03", amount: 1, payment: "银行卡"}]->(g) """)print("关系创建成功!")# 4. 查询数据(查询张三购买的所有商品)defquery_data(self):with self.driver.session()as session: result = session.run(""" MATCH (u:User {name: "张三"})-[r:BUY]->(g:Goods) RETURN u.name, r.buy_time, g.name, g.price, r.amount """)for record in result:print(f"用户:{ record['u.name']}")print(f"购买时间:{ record['r.buy_time']}")print(f"商品名称:{ record['g.name']}")print(f"商品价格:{ record['g.price']}")print(f"购买数量:{ record['r.amount']}")print("-"*20)# 5. 更新数据(修改无线耳机的价格)defupdate_data(self):with self.driver.session()as session: session.run(""" MATCH (g:Goods {name: "无线耳机"}) SET g.price = 699, g.update_time = "2025-12-22" """)print("数据更新成功!")# 6. 删除数据(删除李四购买智能手机的关系)defdelete_data(self):with self.driver.session()as session: session.run(""" MATCH (u:User {name: "李四"})-[r:BUY]->(g:G
Could not load content