为什么RexsterGraph不适用于高性能的图遍历?

时间:2014-06-27 10:55:27

标签: graph-databases gremlin

为什么蓝图堆栈中的RexsterGraph不适用于高性能图遍历:
https://github.com/tinkerpop/blueprints/wiki/Rexster-Implementation

有什么限制? 然后我应该回避执行gremlin抛出一个简单的字符串进行评估吗?

1 个答案:

答案 0 :(得分:1)

RexsterGraph使用Rexster REST API,它是Blueprints API的RESTful表示形式。因此,RexsterGraph中调用的每个Blueprints方法都转换为HTTP调用。

这里有一个例子,说明为什么这对于高性能的遍历"有害。以toy graph为例。让我们说我想用RexsterGraph做一些简单的事情:g.v(1).out.filter{it.name=='josh'}.name。这将转换为以下HTTP调用:

  1. vertices / 1 - 获取v(1)
  2. 的数据
  3. vertices / 1 / outE - 获取v(1)
  4. 的外边缘
  5. vertices / 2 - 知道外边缘告诉我们要检索的另一个顶点
  6. vertices / 3 - 知道外边缘告诉我们要检索的另一个顶点
  7. vertices / 4 - 知道外边缘告诉我们要检索的另一个顶点
  8. vertices / 2 - 现在我们正在过滤所以我们需要名称属性
  9. vertices / 3 - 现在我们正在过滤所以我们需要名称属性
  10. vertices / 4 - 现在我们正在过滤,所以我们需要名称属性
  11. vertices / 4 - 现在我们归结为" josh"所以得到名称属性
  12. 正如您所看到的,它效率不高。它是Blueprints API与Rexster REST API的一对一映射。就是这样。可以提高效率吗?可能......我们可能会考虑缓存属性值或其他东西,但对于高性能遍历来说它仍然会非常健谈#34;尝试提高效率的其他问题是处理序列化闭包的机制,以便可以在服务器上执行。

    最后,很久以前就确定这不是一个好方法,我们开始建议不要使用RexsterGraph来支持服务器端DSL和RexPro / REST Gremlin扩展。