图形数据库和关系数据库之间有什么区别?
图形数据库和关系数据库都存储具有关系的相关数据项,但它们表示数据关系的方式截然不同。关系数据库以包含行和列的表格格式存储数据。所有数据也都存储在表中,数据之间的关系存储为对原始表的表示引用(又名外键)。在运行时,关系数据库使用 JOIN 语句来显式解析这些引用。尽管大多数关系数据库都可以在某些规模上高效地完成这些操作,但当需要处理大量或未知数量的引用时,这些操作就会变得效率低下,例如,当您想通过未知数量的连接来查找相关关系时,比如查明两个人在社交网络中的关系。
相比之下,图形数据库以实体和关系网络的形式存储数据。图形数据库明确存储实体和关系数据,而不是将数据存储为引用。在运行时,图形数据库利用数学图形理论对实体和关系进行高效操作。由于实体之间的关系是显式存储的,而不是计算得出的,因此对于具有复杂数据互连的用例,图形数据库的查询和内存管理效率更高,这可以显著提高应用程序性能。
数据模型:图形数据库与关系数据库
图形数据库和关系数据库均存储信息并表示数据之间的关系。但是,关系模型优先考虑数据实体,而图形模型优先考虑实体之间的关系。
关系数据库模型
关系数据库使用将信息组织成行和列的数据表。其中,列包含数据实体的特定属性,而行表示单个数据记录。
关系数据库的固定架构要求您使用主键和外键预先概述表之间的关系。
示例
考虑带有客户资料的社交媒体应用程序,这些客户可能彼此是朋友。一个典型的模型需要两个表来对数据进行建模。
客户表可能如下所示:
ID |
姓名 |
位置 |
C1 |
Alejandro |
美国 |
C2 |
Ana |
美国 |
C3 |
Kwaku |
美国 |
C4 |
Pat |
美国 |
朋友表可能如下所示:
客户 ID |
朋友 ID |
C1 |
C2 |
C1 |
C3 |
C2 |
C4 |
C2 |
C1 |
C3 |
C1 |
C3 |
C4 |
在查询时,如果要回答“Alejandro 的朋友叫什么名字?”这样的问题,数据库引擎首先会在客户表中找到 Alejandro 的记录。
ID |
姓名 |
位置 |
C1 |
Alejandro |
美国 |
接下来,引擎将使用 Alejandro 的 ID 为他创建朋友表中所有行的并集
ID |
姓名 |
位置 |
客户 ID |
朋友 ID |
C1 |
Alejandro |
美国 |
C1 |
C2 |
C1 |
Alejandro |
美国 |
C1 |
C3 |
现在,对于每一行,引擎都将为每个朋友 ID 创建一个返回到客户表的并集
ID |
姓名 |
位置 |
客户 ID |
朋友 ID |
ID |
姓名 |
位置 |
C1 |
Alejandro |
美国 |
C1 |
C2 |
C2 |
Ana |
美国 |
C1 |
Alejandro |
美国 |
C1 |
C3 |
C3 |
Kwaku |
美国 |
最后,引擎返回了他朋友的名字。
姓名 |
Ana |
Kwaku |
如我们所见,当我们在关系数据中使用连接时,我们最终会建立一个大型数据结构来表示我们要检索的信息。尽管关系数据库进行了优化以最大限度地减少这些结构的影响,但随着连接数量的增加,所需的数据量也会显著增加,从而降低性能并增加内存使用量。
图形数据库模型
另一方面,图形数据库使用具有属性、关系和对象的图形结构来表示数据。节点是对象,边缘表示这些节点之间的关系,而属性描述节点和边缘的属性。借助这种动态结构,图形数据库可用于表示连接的数据。图形数据库在关系和数据类型方面提供更大的灵活性。
示例
使用上述相同的示例社交网络数据,我们的图形数据库将使用 3 个节点(每个节点有 4 个属性)和 2 个边缘来存储数据。
现在,让我们来看看图形数据库是如何处理查询“Alejandro 的朋友叫什么名字?”的。
首先,我们查找表示 Alejandro 的客户节点(如下突出显示)。
接下来,我们将遍历或在我们的朋友边缘中移动。在图形数据库中遍历与在关系数据库中执行 JOIN 类似,不同之处在于,除非明确要求,否则不会保留查询中早期的信息。在下面的示例中,只有两个朋友的边缘保留在内存中。
第三,我们继续遍历相邻节点。
最后,引擎返回了他朋友的名字。
姓名 |
Ana |
Kwaku |
正如我们所见,两个引擎都能够返回相同的信息,但是当遍历许多连接时,图形数据库中关系的显式存储使其能够更高效地处理此请求。尽管这种优势对于简单查询(例如此处所示的查询)并不显著,但这种优化以及图形查询语言的结构,可以显著降低处理需要大量或未知数量关系遍历的问题的复杂性和内存使用量。
主要区别:图形数据库与关系数据库
除了采用不同的数据模型外,关系数据库和图形数据库还有许多差异,这使得它们在功能和效用存在区别。
查询
图形数据库使用经过优化的自定义查询语言,可以快速查找和检索连接的数据。这些语言(例如 TinkerPop Gremlin、openCypher 和 SPARQL)是专门为简化编写利用复杂数据互连的查询而构建的,例如递归数据访问、路径查找和图形算法等操作所需的查询。
相比之下,关系数据库使用 SQL 检索和操作数据。使用 SQL,用户可以对表执行各种类型的查询,例如 SELECT、INSERT、UPDATE 和 DELETE。关系数据库擅长处理具有明确定义的表间关系的结构化数据。此类数据库在跨多个表执行复杂的筛选、聚合和联接时特别有效。
性能
图形数据库将对象和关系存储为数据,并使用索引在相关实体之间高效地遍历。由于图形数据库将关系存储为数据,因此数据库可以在实体之间快速导航,而无需动态计算这些连接。节点之间的直接连接允许即时访问,因此您可以快速查询和跟踪关系。图形数据库借助这些功能实现高效操作。
另外,关系数据库使用索引查找和动态计算的连接来识别实体之间的关系。可以联接多个表,但这会非常耗时,因为系统必须扫描更大的索引而非更多的数据。因此,对于需要大量连接才能检索所需数据的用例,关系数据库无法提供与图形数据库相同的性能。
易用性
图形数据库以关系为中心,从而可在使用连接的数据时轻松操作这些数据库。这些数据库擅长多跃点查询,在这种查询中,可以遍历具有多种关系的路径。您还可以使用 SPARQL、Gremlin 或 openCypher 等图形查询语言来表达查询,使用简单的、图形特定的语法来探索相互关联的数据。
关系数据库使用 SQL,在管理多跃点查询时,SQL 可能会让用户感觉不自然。如果一个查询有多个联接且跨越嵌套的子查询,SQL 语句的编写就会变得困难。如果未能谨慎处理,这很容易转化为难以阅读和维护的庞大查询。
也就是说,关系数据库已经成熟,在各种使用案例中广受欢迎。可以使用多种工具和资源以及社区支持来优化系统。
使用时机:图形数据库与关系数据库
图形数据库和关系数据库有许多有效的使用案例。由于两种数据库具有不同的数据模型和几点核心区别,因此它们在不同的领域表现出色。
图形数据库
图形数据库提供一种灵活的架构,可对数据进行动态更改和调整。图形数据库关注数据关系,因此在分析、语义搜索或推荐引擎中非常有用。在以下情况中,图形数据库是更理想的选择:
- 您正在处理关系复杂的数据,例如社交网络、欺诈检测、知识图谱、安全图谱或个性化推荐引擎中的数据
- 您需要不断演变的架构,因为这样可在不干扰数据库结构其余部分的情况下修改边缘、节点和属性
- 您正在处理互连的数据,需要在关系之间进行多次或未知次数的跳跃(“朋友的朋友”类型查询)
图形数据库具备灵活性、可扩展性、动态性,并且非常擅长显示数据之间的关系。
关系数据库
关系数据库提供结构化架构,可出色地支持数据完整性。在以下情况中,关系数据库是更理想的选择:
- 您需要实现 ACID 合规以及高级别的数据完整性和一致性,例如在金融交易中
- 您正在处理高度结构化的数据,这些数据非常适合表格数据模型,例如在企业资源管理中
- 您的数据包含有限的关系
差异摘要:关系数据库与图形数据库
关系数据库 |
图形数据库 |
|
型号 |
包含行和列的表格。 |
互连的节点,其数据以节点和边缘表示 |
运维 |
创建、读取、更新和删除(CRUD)等 SQL 操作。 |
操作包括 CRUD 和图形遍历操作 |
性能 |
关系数据库在遍历关系时需要执行复杂的查询,这可能会降低性能。 |
图形数据库在表示和查询互连数据之间的关系方面表现出色。 |
易于使用 |
关系数据库可以妥善地处理大型数据集和结构化数据。此类数据库很难处理多跃点查询。 |
处理以关系为中心的数据时,图形数据库易于使用。使用图形查询语言,您可以快速查询多跃点数据。 |
AWS 如何帮助满足您的关系和图形数据库要求?
Amazon Web Services(AWS)为关系数据库和图形数据库使用案例提供解决方案。
关系数据库
Amazon Relational Database Service(Amazon RDS)是一种托管服务,可以简化在云中设置、操作和扩展关系数据库的过程。Amazon RDS 可以在处理耗时的数据库管理任务的同时,提供经济高效的可调容量。Amazon RDS 支持多种数据库引擎,如下所示:
- Amazon Relational Database Service(Amazon RDS)for SQL Server
- Amazon Relational Database Service (Amazon RDS) for MySQL
- Amazon Relational Database Service(Amazon RDS)for MariaDB
- Amazon Relational Database Service(Amazon RDS)for Oracle
- Amazon Relational Database Service(Amazon RDS)for PostgreSQL
- Amazon Relational Database Service(Amazon RDS)for Db2
Amazon Aurora 是一项现代关系数据库服务,它能够大规模地提高性能和高可用性,提供完全开源的 MySQL 兼容版和 PostgreSQL 兼容版。Aurora 也是一项完全托管式服务,该服务使耗时的管理任务(例如硬件调配、数据库设置、修补和备份)自动化,同时以 1/10 的成本提供商用数据库的安全性、可用性和可靠性。
图形数据库
Amazon Neptune 是专门构建的高性能图形数据库引擎。Amazon Neptune 经过优化,可存储数十亿条关系并以毫秒级延迟查询图形。
Neptune 支持流行的图形模型 — 属性图形和 W3C 的资源描述框架(RDF)。Neptune 还支持 Gremlin 和 SPARQL 等查询语言,因此您可以构建用于浏览高度连接的数据集的查询。
Neptune 提供多种功能:
- Neptune 具有高可用性,并提供只读副本、时间点恢复、持续备份以及跨可用区的复制。
- Neptune 非常安全,并支持加密静态数据。
- 该工具完全托管。因此,您再也无需担心硬件预置、软件修补、设置、配置或备份等数据库管理任务。
立即创建账户,开始使用 AWS 的图形数据库和关系数据库。