导航菜单

  • 1.langchain.intro
  • 2.langchain.chat_models
  • 3.langchain.prompts
  • 4.langchain.example_selectors
  • 5.output_parsers
  • 6.Runnable
  • 7.memory
  • 8.document_loaders
  • 9.text_splitters
  • 10.embeddings
  • 11.tool
  • 12.retrievers
  • 13.optimize
  • 14.项目介绍
  • 15.启动HTTP
  • 16.数据与模型
  • 17.权限管理
  • 18.知识库管理
  • 19.设置
  • 20.文档管理
  • 21.聊天
  • 22.API文档
  • 23.RAG优化
  • 24.索引时优化
  • 25.检索前优化
  • 26.检索后优化
  • 27.系统优化
  • 28.GraphRAG
  • 29.图
  • 30.为什么选择图数据库
  • 31.什么是 Neo4j
  • 32.安装和连接 Neo4j
  • 33.Neo4j核心概念
  • 34.Cypher基础
  • 35.模式匹配
  • 36.数据CRUD操作
  • 37.GraphRAG
  • 38.查询和过滤
  • 39.结果处理和聚合
  • 40.语句组合
  • 41.子查询
  • 42.模式和约束
  • 43.日期时间处理
  • 44.Cypher内置函数
  • 45.Python操作Neo4j
  • 46.neo4j
  • 47.py2neo
  • 48.Streamlit
  • 49.Pandas
  • 50.graphRAG
  • 51.deepdoc
  • 52.deepdoc
  • 53.deepdoc
  • 55.deepdoc
  • 54.deepdoc
  • Pillow
  • 1. 图数据库 vs 传统数据库
    • 1.1 什么是图数据库?
    • 1.2 三种数据库类型对比
    • 1.3 为什么需要图数据库?
  • 2. 图数据库的优势
    • 2.1 传统数据库的局限性
    • 2.2 图数据库的优势
    • 2.3 为什么图数据库查询更快?
  • 3. 什么时候应该使用图数据库?
    • 3.1 适合使用图数据库的场景
    • 3.2 不适合使用图数据库的场景
  • 4. 小结
    • 4.1 核心要点
    • 4.2 选择建议

1. 图数据库 vs 传统数据库 #

1.1 什么是图数据库? #

图数据库是一种专门用来存储和处理关系数据的数据库。与传统的表格数据库(如 MySQL)不同,图数据库把关系作为数据的一部分来存储,这使得查询关系变得非常高效。

1.2 三种数据库类型对比 #

为了更好地理解图数据库,让我们对比一下三种常见的数据库类型:

特性 关系型数据库(如 MySQL) 文档数据库(如 MongoDB) 图数据库(如 Neo4j)
数据结构 基于表结构(行和列) 基于文档结构(JSON) 基于节点与关系
关系表示 使用外键建立关系,需要 JOIN 嵌套文档,关系有限 关系作为一等公民,直接存储
查询特点 JOIN 操作复杂,性能随深度下降 关联查询有限 高效深度查询,性能稳定
模式灵活性 模式固定,修改困难 无模式或模式灵活 动态模式,易于扩展
适用场景 结构化数据、报表统计 文档存储、内容管理 关系密集型数据、社交网络

1.3 为什么需要图数据库? #

传统数据库的问题:

想象一下,如果你想在 MySQL 中查找"朋友的朋友的朋友"(3度关系),你需要写这样的 SQL:

-- 查找朋友的朋友的朋友(需要3个JOIN,非常复杂)
SELECT p1.name AS person, p4.name AS friend_of_friend_of_friend
FROM Person p1
JOIN FRIENDS f1 ON p1.id = f1.person_id
JOIN Person p2 ON f1.friend_id = p2.id
JOIN FRIENDS f2 ON p2.id = f2.person_id
JOIN Person p3 ON f2.friend_id = p3.id
JOIN FRIENDS f3 ON p3.id = f3.person_id
JOIN Person p4 ON f3.friend_id = p4.id;

问题:

  • 代码复杂,难以理解和维护
  • 性能随关系深度急剧下降
  • 每增加一层关系,就需要多一个 JOIN

图数据库的解决方案:

在 Neo4j 中,同样的查询只需要一行:

MATCH (p:Person)-[:IS_FRIENDS_WITH*3]->(fof:Person)
RETURN p.name, fof.name

优势:

  • 代码简洁,易于理解
  • 性能稳定,不受关系深度影响
  • 可以轻松查询任意深度的关系

2. 图数据库的优势 #

2.1 传统数据库的局限性 #

在传统的关系型数据库中,如果要查找"朋友的朋友",你需要写复杂的 SQL 查询,连接多个表格。随着关系层级的增加,查询会变得越来越慢,代码也会变得非常复杂。

举个例子:

  • 查找"朋友":需要 1 个 JOIN
  • 查找"朋友的朋友":需要 2 个 JOIN
  • 查找"朋友的朋友的朋友":需要 3 个 JOIN,而且性能会急剧下降

2.2 图数据库的优势 #

图数据库专门为处理关系而设计,无论关系有多深,查询性能都能保持稳定。这使得它特别适合:

  • 社交网络:查找朋友关系、推荐好友
  • 推荐系统:基于用户行为推荐商品
  • 知识图谱:组织和管理复杂的知识关系
  • 欺诈检测:发现隐藏的关联关系

2.3 为什么图数据库查询更快? #

前置知识:什么是 JOIN?

在关系型数据库中,JOIN是用来连接多个表格的操作。比如,如果你想查找"张三的朋友",你需要:

  1. 在 Person 表中找到"张三"
  2. 在 FRIENDS 表中找到张三的朋友 ID
  3. 在 Person 表中找到这些朋友的信息

这个过程需要扫描多个表格,随着关系层级的增加,性能会急剧下降。

图数据库的优势:原生关系存储

关键区别:图数据库不使用 JOIN

在关系型数据库中:

  • 数据存储在表格中
  • 关系通过外键建立
  • 查询关系需要 JOIN 操作(慢)

在图数据库中:

  • 关系直接存储在节点旁边
  • 查询关系就像"沿着线条走"(快)
  • 不需要 JOIN 操作

3. 什么时候应该使用图数据库? #

3.1 适合使用图数据库的场景 #

  • 数据之间的关系比数据本身更重要
  • 需要频繁查询"谁和谁有关系"这类问题
  • 关系层级很深(朋友的朋友的朋友...)
  • 需要发现隐藏的关系模式

3.2 不适合使用图数据库的场景 #

  • 数据主要是简单的表格结构
  • 主要是数值计算和统计
  • 关系很简单,只有 1-2 层

4. 小结 #

4.1 核心要点 #

  1. 图数据库的优势:专门为关系查询优化,性能稳定
  2. 适用场景:关系密集型数据、深度关系查询
  3. 性能优势:不需要 JOIN,查询关系就像"沿着线条走"

4.2 选择建议 #

  • 如果你的数据主要是表格结构,使用关系型数据库
  • 如果你的数据关系复杂且需要频繁查询关系,使用图数据库
  • 如果你的数据关系层级很深,图数据库是最佳选择
← 上一节 29.图 下一节 31.什么是 Neo4j →

访问验证

请输入访问令牌

Token不正确,请重新输入