使用gremlin遍历和Graph中的方法之间的区别

时间:2014-09-03 00:12:39

标签: gremlin tinkerpop tinkerpop-blueprint tinkergraph

假设我有以下简单的图表。

enter image description here

我看到了两种遍历此图的方法

选项1

我可以使用Graph

提供的以下API
Graph factory = ...
factory.getVertices("type", "Response");

选项2

我也可以使用GremlinPipeline来记录here

Graph g = ... // a reference to a Blueprints graph
GremlinPipeline pipe = new GremlinPipeline();
pipe.start(g.getVertex(1))

我的问题是

  • 为什么有两个API?
  • 何时使用哪一个?
  • GremlinPipeline是否利用了使用TnkerGraph的index related methods创建的indeces?

1 个答案:

答案 0 :(得分:2)

有两个用于获取数据的API,因为一个代表一个蓝图级别,它是一个较低的抽象级别,具有用于访问图形的实用级别函数和Gremlin级别,这是一个具有更高程度的表达性的更高抽象级别在遍历图表时。设计原则是围绕以下事实构建的:Blueprints是不同图形数据库(即Neo4j,OrientDB等)上的抽象层,并且它需要足够简单以便快速开发实现。然而,Gremlin是一种图形遍历语言,它适用于Blueprints API,使Gremlin可以在多个图形数据库上运行。

你的例子不允许Gremlin发光。当然,在这些情况下,选择其中一个并不是一个理由。这是一个类似的例子,我认为更好:

// blueprints
g.getVertices()

// gremlin
g.V

除了保存一些角色,Gremlin真的没有给我任何东西。但是,请考虑这个Gremlin:

g.V.out('knows').outE('bought').has('weight',T.gt,100).inV.groupCount().cap()

我不会提供相当于蓝图的蓝图,因为它需要输入很多代码。你必须相信这一行Gremlin值得用很多丑陋的循环来代码。

大多数情况下,对于遍历来说,使用原始Blueprints API并不是必需的。您将发现自己使用它来加载数据,但除此之外,请使用Gremlin。