关系数据库与图数据库的比较
本页面探讨了关系型数据库和图数据库在结构与数据模型方面的概念差异。有关查询语言的比较,请参阅 Cypher® 与 SQL 的比较。
关系型数据库概述
关系型数据库将高度结构化的数据存储在具有预定义列和特定类型行信息的表中。由于其组织结构较为僵化,关系型数据库要求开发人员和应用程序必须严格规范应用所使用的数据结构。
在关系型数据库中,对其他行和表的引用是通过外键列引用主键属性来表示的。JOIN 操作是在查询时通过匹配连接表中所有行的主键和外键来计算的。这些操作计算密集且内存消耗大,并具有指数级的成本。
当模型中出现多对多关系时,必须引入一个 JOIN 表(或关联实体表),该表保存了两个参与表的外部键,这进一步增加了连接操作的成本。
下图展示了将 Employee(来自 Employee 表)连接到 Department(在 Departments 表中)的概念:通过创建一个 Dpt_Members 连接表,其中一列包含员工 ID,另一列包含关联部门的 ID。
这种结构使得理解连接变得繁琐,因为为了知道哪个员工连接到哪个部门,你必须先知道 Employee 和 Department 的 ID 值(并执行额外的查找来找到它们)。
此外,这类昂贵的 JOIN 操作通常通过数据反规范化来解决,以减少所需的 JOIN 次数,但这会破坏关系型数据库的数据完整性。图数据库提供了其他连接数据的方法。
将关系型知识转换为图
与其他数据库管理系统不同,在图数据模型中,关系与数据本身同等重要。这意味着你不需要使用外键等特殊属性或 map-reduce 等带外处理来推断实体之间的连接。
通过将节点和关系组合成连接结构,图数据库能够构建与问题领域密切映射的模型。借助 Cypher 的 JOIN 操作等效项,图数据库可以直接访问连接的节点,从而消除了对昂贵的搜索与匹配计算的需求。
这种将关系预先物化到数据库结构中的能力,使得 Neo4j 相比其他系统能提供更高的性能,特别是在涉及大量连接的查询中。
数据模型差异
由于上述结构差异,关系型数据库和图数据库的数据模型存在巨大差异。图模型需要考虑访问需求、预期查询和性能,以及业务逻辑。
例如,如果你想知道 Alice 属于哪些部门,关系型数据库和图数据库对相同数据的结构化方式如下:
在左侧的关系型示例中,你需要:
-
搜索
Employees表(可能包含数千行)以找到用户 Alice 及其 ID 815。 -
搜索
Dept_Members表以定位所有引用 Alice ID 815 的行。 -
找到 3 行相关记录后,你需要前往
Departments表以搜索部门 ID 的实际值(111、119、181)。 -
此时你才知道 Alice 属于 4Future、P0815 和 A42 部门。
而在图数据库版本中,你需要:
-
搜索 Alice 的
Employee节点。 -
遍历所有从 Alice 出发的
BELONGS_TO关系,并找到她所连接的Department节点。
如果你想学习如何创建数据模型,请跟随 教程:创建图数据模型,或者查看如何通过 建模:从关系型到图 将现有的关系型模型项目转换为图模型。
数据存储与检索
SQL 是用于查询关系型数据库的查询语言。Cypher 是 Neo4j 的声明式查询语言,它建立在 SQL 的基本概念和子句之上,但增加了使图数据库操作更高效的其他功能。
例如,在编写包含大量 JOIN 的 SQL 语句时,由于 SQL 语法中存在大量技术冗余,你很快会迷失在查询的实际用途中。在 Cypher 中,语法保持简洁并专注于领域组件及其连接,从而以更直观、清晰的方式表达查找或创建数据的模式。
除了基本模式匹配之外的其他子句看起来仍然与 SQL 非常相似,因为 Cypher 是基于其前身语言的基础构建的。你可以查看它们的相似点和不同点:Cypher 与 SQL 的比较。
持续学习
-
导入:从 RDBMS 到图 → 了解如何将数据从关系型数据库导入到图数据库。
-
建模:从关系型到图 → 查找更多关于关系型与图数据建模的比较。
-
面向 RDBMS 开发人员的图数据库权威指南 → 下载免费电子书。