1

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

在此处输入图像描述

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

选项1

我可以使用Graph类提供的以下 API

Graph factory = ...
factory.getVertices("type", "Response");

选项 2

我还可以使用此处记录的GremlinPipeline API

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

我的问题是

  • 为什么有两个 API?
  • 什么时候用哪一个?
  • GremlinPipeline 是否利用了使用TnkerGraph 的索引相关方法创建的索引?
4

1 回答 1

2

有两种用于获取数据的 API,因为一个代表蓝图级别,它是具有用于访问图形的实用程序级别函数的较低抽象级别,而 Gremlin 级别是高级抽象,在遍历图形时具有更高程度的表达能力. 设计原则是基于这样一个事实,即蓝图是不同图形数据库(即 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 值得拥有大量丑陋循环的多行代码。

大多数时候,对于遍历来说,使用原始蓝图 API 并不是必需的。您会发现自己使用它来加载数据,但除此之外,使用 Gremlin。

于 2014-09-03T09:56:46.777 回答