【问题标题】: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))

我的问题是

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

【问题讨论】:

    标签: 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。

    【讨论】:

    • ...是的,gremlin 将利用索引。
    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多