数据模型:图形数据库与关系数据库
图形数据库和关系数据库均存储信息并表示数据之间的关系。但是,关系模型优先考虑数据实体,而图形模型优先考虑实体之间的关系。
关系数据库模型
关系数据库使用将信息组织成行和列的数据表。其中,列包含数据实体的特定属性,而行表示单个数据记录。
关系数据库的固定架构要求您使用主键和外键预先概述表之间的关系。
示例
考虑带有客户资料的社交媒体应用程序,这些客户可能彼此是朋友。您需要两个表来对数据进行建模。
客户表可能如下所示:
ID |
姓名 |
位置 |
C1 |
Alejandro |
美国 |
C2 |
Ana |
美国 |
C3 |
Kwaku |
美国 |
C4 |
Pat |
美国 |
朋友表可能如下所示:
客户 ID |
朋友 ID |
C1 |
C2 |
C1 |
C3 |
C2 |
C4 |
C2 |
C1 |
C3 |
C1 |
C3 |
C4 |
如您所见,表示复杂关系时存在冗余和重复。这些冗余和重复可能会增加存储要求并大规模降低性能。
图形数据库模型
另一方面,图形数据库使用具有属性、边缘和节点的图形结构来表示数据。节点是对象,边缘表示这些节点之间的关系,而属性描述节点和边缘的属性。借助这种动态结构,图形数据库可用于表示连接的数据。图形数据库在关系和数据类型方面提供更大的灵活性。
示例
上一节中社交媒体应用程序的数据现在将如下所示:
{customer_id: “C1”
name: “Alejandro”
location:”USA”
friends:”C2,C3”}
在建模关系时,数据记录不再有重复或冗余。
主要区别:图形数据库与关系数据库
除了采用不同的数据模型外,关系数据库和图形数据库还有许多差异,这使得它们在功能和效用存在区别。
运维
可以使用图形遍历算法来查询图形数据模型。这些算法采用深度优先或广度优先形式,这有助于快速查找和检索连接的数据。图形数据库有助于处理复杂的互连和查询,因为它们可以理解数据之间的关系。
相比之下,关系数据库使用 SQL 检索和操作数据。使用 SQL,用户可以对表执行各种类型的查询,例如 SELECT、INSERT、UPDATE 和 DELETE。关系数据库擅长处理具有明确定义的表间关系的结构化数据。此类数据库在跨多个表执行复杂的筛选、聚合和联接时特别有效。
可扩展性
扩展关系数据库时,通常是垂直扩展。垂直扩展是指升级硬件(例如 CPU、存储空间或内存)以增加服务器可以处理的工作负载。垂直扩展有局限性,除了成本要求外,还会带来各种问题。
关系数据库也可以使用分片进行水平扩展,即在许多服务器上分发数据。但是,分片会增加数据存储的复杂性,并可能引发一致性问题。
相比之下,图形数据库非常擅长横向扩展,并且使用分区来实现此类扩展。所有分区位于不同的服务器上,这使得许多服务器可以并行处理图形查询。通过在多个节点上分发,数据库引擎可以有效地查询数据,即使是大规模查询数据亦可轻松应对。
性能
图形数据库提供无索引邻接,从而提高性能。无索引邻接可让系统在相关实体之间遍历。由于图形数据库将关系存储为节点之间的引用或指针,因此数据库可以跟随内存指针在实体之间快速导航。在这种情况下,数据库不需要索引或映射表。
这种无索引邻接系统可让图形数据库实现恒定时间的关系遍历。恒定时间意味着无论数据规模如何,都可以在相同的时间量内始终如一地遍历图形数据库中的关系。节点之间的直接连接可实现即时访问,因此可以快速查询和跟踪关系。图形数据库借助这些功能实现高效操作。
另一方面,关系数据库使用索引查找,并且必须扫描表以识别实体之间的关系。可以联接多个表,但这会非常耗时,因为系统必须扫描更大的索引而非更多的数据。因此,关系数据库无法提供与图形数据库相同的性能。
易用性
图形数据库以关系为中心,从而可在使用连接的数据时轻松操作这些数据库。这些数据库擅长多跃点查询,在这种查询中,可以遍历具有多种关系的路径。还可以使用图形查询语言(如 Gremlin 或 Cypher)来直观地表达关系。可以使用这些语言浏览相互连接的数据,这简化了用于探索嵌套和联接数据的语法。
关系数据库使用 SQL,在管理多跃点查询时,SQL 可能会让用户感觉不自然。如果一个查询有多个联接且跨越嵌套的子查询,SQL 语句的编写就会变得困难。如果未能谨慎处理,这很容易转化为难以阅读和维护的庞大查询。
也就是说,关系数据库已经成熟,在各种使用案例中广受欢迎。可以使用多种工具和资源以及社区支持来优化系统。同样,关系数据库在以可靠且符合 ACID 的方式管理结构化数据时表现出色。ACID 属性包括原子性、一致性、隔离性和持久性,有助于确保数据的有效性。
使用时机:图形数据库与关系数据库
图形数据库和关系数据库有许多有效的使用案例。由于两种数据库具有不同的数据模型和几点核心区别,因此它们在不同的领域表现出色。
图形数据库
图形数据库提供一种灵活的架构,可对数据进行动态更改和调整。图形数据库关注数据关系,因此在分析、语义搜索或推荐引擎中非常有用。在以下情况中,图形数据库是更理想的选择:
- 您正在处理关系复杂的数据,例如社交网络、欺诈检测、知识图谱和搜索引擎中的数据
- 您需要不断演变的架构,因为这样可在不干扰数据库结构其余部分的情况下修改边缘、节点和属性
- 您正在处理互连的数据,需要在关系之间进行三次或更多次跳跃(“朋友的朋友”类型查询)
图形数据库具备灵活性、可扩展性、动态性,并且非常擅长显示数据之间的关系。
关系数据库
关系数据库提供结构化架构,可出色地支持数据完整性。在以下情况中,关系数据库是更理想的选择:
- 您需要实现 ACID 合规以及高级别的数据完整性和一致性,例如在金融交易中
- 您正在处理高度结构化的数据,这些数据非常适合表格数据模型,例如在企业资源管理中
- 您的数据包含有限的关系
差异摘要:关系数据库与图形数据库
关系数据库 |
图形数据库 |
|
型号 |
包含行和列的表格。 |
互连的节点,其数据以 JSON 文档表示。 |
运维 |
创建、读取、更新和删除(CRUD)等 SQL 操作。 |
操作包括基于数学图形理论的 CRUD 和图形遍历运算。 |
可扩展性 |
传统的关系数据库可以垂直扩展,但横向困难却很困难。 |
图形数据库在横向扩展方面表现出色。此类数据库可以使用分区在多个节点之间分发数据。 |
性能 |
关系数据库在遍历关系时需要执行复杂的查询,这可能会降低性能。 |
图形数据库在表示和查询数据之间的关系方面表现出色。 |
易于使用 |
关系数据库可以妥善地处理大型数据集和结构化数据。此类数据库很难处理多跃点查询。 |
处理以关系为中心的数据时,图形数据库易于使用。使用图形查询语言,您可以快速查询多跃点数据。 |
AWS 如何帮助满足您的关系和图形数据库要求?
Amazon Web Services(AWS)为关系数据库和图形数据库使用案例提供解决方案。
Amazon Relational Database Service(Amazon RDS)是一个托管式服务的集合,可以简化在云中设置、运营和扩展关系数据库的过程。Amazon RDS 支持多种数据库引擎,如下所示:
- 适用于 SQL Server 的 Amazon Relational Database Service(Amazon RDS)用于部署多个版本的 SQL Server(2014、2016、2017 和 2019 版)
- 适用于 MySQL 的 Amazon Relational Database Service(Amazon RDS)支持 MySQL 社区版 5.7 和 8.0
- 适用于 MariaDB 的 Amazon Relational Database Service(Amazon RDS)现在支持 MariaDB Server 版本 10.3、10.4、10.5 和 10.6
同样,Amazon Neptune 是专门构建的高性能图形数据库引擎。Amazon Neptune 经过优化,可存储数十亿条关系并以毫秒级延迟查询图形。
Neptune 支持流行的图形模型 — 属性图形和 W3C 的资源描述框架(RDF)。Neptune 还支持 Gremlin 和 SPARQL 等查询语言,因此您可以构建用于浏览高度连接的数据集的查询。
Neptune 提供多种功能:
- Neptune 具有高可用性,并提供只读副本、时间点恢复、持续备份以及跨可用区的复制。
- Neptune 非常安全,并支持加密静态数据。
- 该工具完全托管。因此,您再也无需担心硬件预置、软件修补、设置、配置或备份等数据库管理任务。
立即创建账户,开始使用 AWS 的图形数据库和关系数据库。