尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili
如前文图数据Neo4j导论所提,Neo4j是一个具有原生处理(native processing)功能和原生图存储(native graph storage)的图数据库(上文)。本文将继续探秘图数据库Neo4j,从其内部构造来讨论它的实现,展示它们与其他对复杂的、结构可变的、紧密关联的数据的存储方法和查询方法的不同之处。
image.png
1. Neo4j 原生图处理
在前文中我们已经讨论过图数据库的一些基本概念。本文假设读者应该对节点通过命名的和有方向的联系关联、节点和联系都作为属性的容器这些概念有所熟悉。
虽然图模型在图数据库的各种表现基本上是一致的,但在数据库引擎的实现方式缺失百花齐放。对于很多不同的引擎体系结构,如果图数据库存在免索引邻接属性(index-free adjacency field) ,那么行业上通常认为它具有原生处理能力。
在免索引邻接的数据库引擎中,每个节点都会维护其对相邻节点的引用。因此每个节点都表现为其附近节点的微索引,这比使用全局索引代价小很多。这意味着查询时间与图的整体规模无关,它仅和所搜索图的数量成正比。
相反,一个非原生图数据库引擎使用(全局)索引连接各个节点,如下图所示。这些索引对每个遍历都添加一个间接层,因此会导致更大的计算成本。原生图处理的拥护者认为免索引邻接至关重要,因为它提供快速、高效的图遍历。
image.png
相对于RDBMS的关系查询,图数据库的改进在于:
-
免索引邻接使用遍历物理关系的方法查找,比全局索引来说代价小很多。查询一个索引的时间复杂度一般为
O(log(n))
,而遍历物理关系的时间复杂度仅为O(1)
。如果我们要遍历一个m步的网络,索引方法需要花费O(mlogn)
的时间,这面对成本仅为O(m)
的免索引邻接就显得相形见绌了。 -
RDBMS当索引建立后,试图反向遍历时,建立的索引就会不起作用了,需要再反向建立索引。而免索引邻接机制就不会有问题。
上图展示了非原生图处理方法的工作原理。要寻找Alice的朋友,我们必须首先执行索引查找,成本为