2

JanusGraph:我使用 ConfiguredGraphFactory 创建了一个自定义图形,并且能够使用 gremlin 控制台访问该图形。如何从我的 Scala 代码访问此图?

目前我正在运行一个远程 gremlin 服务器,并从我的代码连接到这个远程服务器,以在我的自定义图形上执行事务。我想知道是否有任何方法可以在我的程序中创建 janusgraph 实例并访问图形而不是通过远程服务器。

Janus 图表版本:0.2.0

4

1 回答 1

4

目前,在符合 TinkerPop 的系统中,您无法实例化作用于远程图引用的本地图引用。但是,您可以使用withRemote实例化由远程图遍历引用支持的本地图遍历对象:

gremlin> cluster = Cluster.open('conf/remote-objects.yaml')
==>localhost/127.0.0.1:8182
gremlin> graph = EmptyGraph.instance()
==>emptygraph[empty]
gremlin> g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "g"))
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> g.V().valueMap(true)
==>[name:[marko],id:1,label:person,age:[29]]
==>[name:[vadas],id:2,label:person,age:[27]]
==>[name:[lop],id:3,label:software,lang:[java]]
==>[name:[josh],id:4,label:person,age:[32]]
==>[name:[ripple],id:5,label:software,lang:[java]]
==>[name:[peter],id:6,label:person,age:[35]]
==>[name:[matthias],id:13,label:vertex]
gremlin> g.close()
gremlin> cluster.close()

但是,由于您使用的是ConfiguredGraphFactory,我将假设您的图表是动态创建的。这意味着您的图和遍历对象不会绑定到远程服务器上的任何变量名称,因为这些绑定传统上是在定义您的 gremlin-server.yaml graphs {} 对象的图的实例化期间形成的。正如您在上面看到的,唯一的使用方法withRemote是提供绑定到远程服务器上的图遍历的变量的名称。JanusGraph 目前不支持动态更新服务器的全局绑定,但是一旦支持,您就可以使用withRemote方法来获取对远程遍历对象的本地引用。如果您需要使用绑定到远程图引用的本地图对象,则需要与 TinkerPop 社区合作以启用此类功能。有关此问题的更多信息,请参阅此 TinkerPop Jira

另一种解决方案是删除远程 JanusGraph 服务器的层。如果您希望在本地运行图形处理,那么您可能根本不需要远程 JanusGraph 服务器。然后,您可以使用 实例化图引用,JanusGraphFactory并对直接与后端数据存储对话的本地图引用执行查询。

最后,假设您配置了远程 JanusGraph 服务器和后端数据存储(即您知道远程 JanusGraph 服务器如何配置为与后端数据存储通信——这将是保存在您的 ConfigurationManagementGraph 上的配置),您可以离开远程 JanusGraph单独的服务器,并通过使用 JanusGraphFactory 打开一个属性文件来实例化本地图引用,该属性文件具有与 ConfigurationManagementGraph 定义的图相同的配置。

于 2017-12-13T18:21:24.673 回答