1.3.2 图数据模型的优势

在图数据库中,关系是最重要的元素。通过关系我们能够将节点相互关联起来,以构建与我们问题领域密切相关的复杂模型。

图数据库模型中的每个节点都直接包含一个关系列表,该关系列表存放此节点与其他节点的关系记录。这些关系记录按类型和方向组织起来,并且可以保存附加属性。无论何时运行类似关系数据库的连接(Join)操作时,图数据库都将使用此列表来直接访问连接的节点,无须进行记录的搜索、匹配计算操作。

将关系预先保存到关系列表中的这种能力,使Neo4j能够提供比关系数据库高几个数量级的性能,特别是对于复杂连接的查询,Neo4j能够实现毫秒级的响应。

使用图数据库来组织数据所得到的数据模型,比使用传统关系或其他NoSQL数据库的数据模型更简单,同时更具有表现力。

图数据库支持非常灵活和细粒度的数据模型,可以用简单直观的方式对数据应用进行建模和管理,可以更方便地将数据单元小型化、规范化;同时还能实现丰富的关系连接,这样在对数据查询时可以用任何可想象到的方式进行查询操作。可见,与关系数据库相比,图数据库可支持更多类型的用例,如图1-7所示。

图1-7 图数据库中关系的丰富表现

众所周知,数据库为确保数据的正确性,创造性地引入了事务概念,即ACID特性。像Neo4j这样的图数据库完全支持ACID事务,包括预写式日志(write-ahead logs)的恢复和异常终止后的恢复,所以永远不会丢失已经被加入数据库的数据。

下面是一个用关系数据模型和图数据模型建模的实例,通过两个E-R图(Entity Relationship Diagram,实体-关系图),可以看出使用图数据库能够更加简洁明了地描述数据之间的关系。

如图1-8所示,要使用关系数据库创建一个项目部门组织的存储结构,必须为项目、部门、组织、人员单独创建表结构,各个表结构之间通过外键约束相互关联,对于多对多的复杂关系还必须创建中间表(如Department_Members表),通过E-R图可以看出,各个表结构中创建了大量的主键、外键,并创建了中间表来维护复杂关系,这消耗了大量的系统资源。

图1-8 关系数据模型

如果采用图数据库创建一个项目部门组织的存储结构,则容易得多,只需要为项目、部门、组织、人员创建节点,并且节点不需要主键、外键,也不需要中间表,只保留必要的属性即可。各个节点直接通过关系指向来表达节点之间的复杂关系。使用图数据库可以更加简洁、明确地描述数据间的复杂关系,如图1-9所示。

图1-9 图数据模型