【问题标题】:Tinkerpop/Gremlin and a remote serverTinkerpop/Gremlin 和远程服务器
【发布时间】:2015-01-15 17:48:37
【问题描述】:
我使用 Tinkerpop/Gremlin 查询远程图形数据库(OrientDB 或 Neo4J,选择仍不清楚)。
查询是多步骤的,如下例:
g.v(1).out('likes').in('likes').out('likes').groupCount(m)
我想知道:Gremlin 查询的每一步是否都有网络往返?或者,Gremlin 查询是否“编译”成我后端的本地查询语言,然后本地查询通过网络发送一次,结果从服务器流式传输回客户端?
【问题讨论】:
标签:
neo4j
orientdb
gremlin
tinkerpop
【解决方案1】:
假设您使用的是Neo4jHaGraph,那么它将按照您描述的网络调用工作,因为每个步骤都需要它们(即整个语句未编译并发送到服务器)。我不确定OrientGraph 远程配置的最新功能,尽管我怀疑它以类似的方式工作,在每一步都根据需要进行网络调用。
开发Rexster 的原因之一是允许将 Gremlin 脚本发送到服务器,以便它可以在 Graph 的嵌入式实现上执行(例如Neo4jGraph)。通过这种方式,网络往返将减少,因为遍历的执行将发生在同一个 JVM 中。
以上所有内容都适用于 TinkerPop 2.x。期待 TinkerPop 3.x(尚未发布),您将拥有 Gremlin Server,它取代了 Rexster,并允许更有效地将结果流式传输回调用客户端。它还使供应商有机会优化遍历,例如您提供的示例,以便在实现时更有效。这将如何应用于远程配置还有待观察,但想想在该领域可能会发生什么是很有趣的。