原生图处理是一种图数据的处理模式,图数据库neo4j采用这种方法,一般认为存在免索引邻接属性,就可称为图原生处理。
再回到上一篇的案例,关系数据库查询朋友的朋友
每一次的join,是通过全局索引来查找关联,图原生则不然,其在每个节点的属性中增加了向下层级的指针,也即是所,图遍历中,无需查找,可以直接读取关联节点的地址。这意味着每个节点直接引用相邻节点,充当邻节点的微索引。
任意给定一个起点,如p2 不需要去查找索引,可以直接找到p2相邻的p3和p4, 这样每次的查找代价都是O(1)
除此之外,索引对于反向查找的场景,更加麻烦,如果使用图原生 则是一个很容易处理的问题,比如简单的存储双向引用,图原生的数据结构可以类比链表结构。
与索引相同的任务相比,无索引邻接更便宜,更高效,因为查询时间与搜索的图的数量成正比,而不是随数据的整体大小而增加。如果没有无索引的邻接性 一个大型的图数据集会在其自身的重量下被压垮 因为随着数据集的增长,查询的时间会越来越长。反过来说,无论你的数据大小如何,原生图查询的执行速度都是恒定的。
由于图数据库将关系数据存储为一级实体,因此通过原生图处理,关系在任何方向上都更容易遍历。通过专门为图数据集构建的处理,关系(而不是过度依赖索引)可用于最大化遍历效率。