第 2 章 图数据库概要

优质
小牛编辑
132浏览
2023-12-01

这个章节包括一个对图数据模型的介绍以及将它与其他我们常见的数据持久化模型的比较。

2.1. 什么是图数据库?

图数据库用图来存储数据,是最接近高性能的一种用于存储数据的数据结构方式之一。让我们跟随下面的图表,用他们来解释图数据库相关概念。我们将跟随图表中箭头方向来读懂图想表达的真正含义。

2.1.1. 一个图由无数的节点和关系组成

“一张图 – 数据记录在 → 节点 → 包括的 → 属性里面”

最简单的图是单节点的,一个记录,记录了一些属性。一个节点可以从单属性开始,成长为成千上亿,虽然会有一点点麻烦。从某种意义上讲,将数据用关系连接起来分布到不同节点上才是有意义的。

2.1.2. 关系将图各个部分组织起来

“节点 — 被组织 → 关系 — 可以有 → 属性”

关系可以将节点组织成任意的结构,允许一张图被组织成一个列表,一棵树,一张地图,或者一个复杂的实体 – 这个实体本身也是由复杂的,关系高度关联的结构组成。

2.1.3. 用 Traversal 进行数据库查询

“一个 Traversal — 导航 → 一张图; 他 — 标示 → 路径 — 包含 → 节点”

一次 Traversal, 你可以理解为是你通过一种算法,从一些开始节点开始查询与其关联的节点,比如你想找到 “我朋友喜欢但我不喜欢的那首音乐是什么呢?”,又或者 “如果断电了,拿下服务器的服务会首影响?”等等问题。

2.1.4. 为节点和关系建立索引

“一个索引 — 映射到 → 属性 — 属于 → 节点或者关系”

经常,你想通过某一给定的属性值找到节点或者关系。比起通过遍历我们的图来书,用索引将会更加高效。比如“找到用户名是tony的用户”。

2.1.5. Neo4j是一个图数据库

“一个图数据库 — 管理 → 一张图 和与图相关的 → 索引”

Neo4j是一个有商业支持的开源图数据库。他被设计来用于拿下数据不断高速成长的数据存储,用高效的图数据结构代替传统的表设计。用Neo4j工作,您的应用将得到图的所有优越表现,以及您期望的高可靠性。

2.2. 比较各种数据库模型

图数据库通过在一张图上存储节点和关系来持久化我们的数据结构。比起其他持久化数据模型如何呢?因为图是一种常规数据结构,让我们与其他的进行一下比较试试看。

2.2.1. 从图数据库转换成 RDBMS

将所有的数据用竖立的堆栈表示,并且保持他们直接的关系,你可以看到下面一张图。一个 RDBMS 被优化用于聚合数据,而Neo4j擅长于高度关联的数据。

图 2.1. RDBMS

图 2.2. 用图实现RDBMS模型

2.2.2. 从图数据库转换成Key-Value数据库

Key-Value模型适合用于简单的数据或者列表。当数据之间不断交互关联时,你更需要一张图模型。Neo4j让你能惊醒制作简单的数据结构到复杂,互相连接的数据。

图 2.3. Key-Value 存储模型

K* 代表一个键,V* 代表一个值。请注意,某些键指向其他键以及普通值。

图 2.4. 用图实现 Key-Value 模型

2.2.3. 从图数据库转换成列数据库

列式(大表)数据库是 Key-Value模型的升级,用 “”来允许行数据增加。如果存储一张图,这个表将是分层的,关系也是非常明确的。

2.2.4. 从图数据库转换成文档型数据库

文档型数据库用文档进行层次划分,而自由的数据规划也很容易被表示成一颗树。成长为一张图的话,文档之间的关联你需要更有代表性的数据结构来存储,而在Neo4j中,这些关系是非常容易处理的。

图 2.5. 文档型数据库

D=文档, S=子文档, V=值, D2/S2= 关联到(其他)文档的索引。

图 2.6. 从图数据库转换成文档型数据库