分布式与本地图数据遍历引擎区别分析

目的

在图数据库领域一直存在着两种遍历引擎:分布式图数据库遍历引擎和本地图数据库遍历引擎。
简单来说,本地图数据库遍历引擎通常用于将单机图数据库中图数据的遍历,满足用户的实时图遍历需求。分布式图数据库遍历引擎通常用于分布式数据库中图数据的遍历,满足用户的批量图遍历需求。
本地图数据库遍历引擎和分布式图数据库遍历引擎首先在应用规模上是不同的。

分布式与本地图数据遍历引擎

本地图数据库遍历引擎

本地图数据库遍历

上图即是一份图数据,数据存储在单机图数据库中。我们对于图的遍历需求是
寻找出顶点1的好朋友的好朋友,Gremlin遍历路径描述如下:

g.v(1).outE('friend').inV.outE('friend').inV

在本地图数据库遍历引擎中,将遍历路径解析成执行计划,并实例化一个遍历器(Traverser),由这个遍历器去对图数据进行遍历并返回遍历结果。

分布式数据库遍历引擎

分布式图数据库利用图分割方法,将一个完整的图数据分割后存在不同分区中。当需要对这个图进行遍历分析的时候,由于底层数据的分布式存储,一个遍历实例往往是完成不了这种遍历需求的。
这个时候往往需要用到分布式式数据库遍历引擎。分布式遍历引擎会起多个遍历器,这些遍历器遍历的数据是不同的,它们是平行计算的,但是它们之间会不断的交换各自的计算结果,并将它传给其它的遍历器,这样其它遍历器得到这部分计算结果后与本地的遍历数据进行合并,从而得到整个图的遍历结果。

分布式图数据库遍历

如上图是一份图数据,假设这个图的数据存储在不同的图数据库分区上,我们的需求是在这个图中使用ranking算法,那么我们在每分顶点数据的遍历器中都需要运行如下的代码:

public void evaluateStep(int step) {
  if(!this.inbox.isEmpty() && step < 1000) {
    this.rank = this.rank + this.inbox.size();
    for(Vertex vertex : this.adjacentVertices()) {
      for(int i=0; i

你可能感兴趣的:(分布式与本地图数据遍历引擎区别分析)