【问题标题】:Difference between traversal using gremlin and methods from Graph使用 gremlin 的遍历和来自 Graph 的方法之间的区别
【发布时间】:2014-09-03 00:12:38
【问题描述】:
假设我有以下简单的图表。
我看到了遍历此图的两种方式
选项 1
我可以使用Graph类提供的以下API
Graph factory = ...
factory.getVertices("type", "Response");
选项 2
我也可以使用GremlinPipeline API,如记录的here
Graph g = ... // a reference to a Blueprints graph
GremlinPipeline pipe = new GremlinPipeline();
pipe.start(g.getVertex(1))
我的问题是
【问题讨论】:
标签:
gremlin
tinkerpop
tinkerpop-blueprint
tinkergraph
【解决方案1】:
有两种 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。