0

示例代码(JAVA):

Cluster cluster = Cluster.open(yml.getFile());
DriverRemoteConnection driver = DriverRemoteConnection.using(cluster, "graph_traversal");
GraphTraversalSource allGraph = AnonymousTraversalSource.traversal().withRemote(driver);

// Using Io --> generate a file in server-side
allGraph.Io("File.json").write().iterate()

// Using GraphSONWriter 
GraphSONMapper mapper = GraphSONMapper.build().addRegistry(JanusGraphIoRegistry.instance()).version(GraphSONVersion.V3_0).create();
GraphSONWriter writer = GraphSONWriter.build().mapper(mapper).create();
ByteArrayOutputStream output = new ByteArrayOutputStream();

// output --> "" (Empty)
writer.writeGraph(output, allGraph.getGraph());

// output --> "~" (Only Vertex Ids)
writer.writeVertices(output, allGraph.V());

我正在尝试使用远程服务器将 Graph 导出为 GraphSON。但 IO 步骤不提供远程导出功能。使用 GraphSonWriter,它不会正确写入内容。如何使用远程服务器环境以 GraphSON 格式导出图形?

谢谢你。

4

1 回答 1

2

在 TinkerPopg.io()为远程环境的步骤提供更好的支持之前,它仍然只适用于在 Gremlin 执行发生的本地读取和写入。如果您想将图形导出到远程源的 GraphSON,那么根据您使用的图形,有几个选项。你用 JanusGraph 标记了这个问题,所以我将重点关注它。你可以:

  1. 发送一个脚本GraphSONWriter,然后在服务器上实例化 a,然后提供writeGraph()一个OutputStream将写入 abyte[]String然后将其返回给您的客户端的脚本。
  2. 我认为这是一个可能适合内存的“小”图,所以只需g.E().subgraph('sg').cap('sg')将整个图复制到子图即可。这将TinkerGraph在客户端上为您生成一个,然后您可以从那里随意使用io(),将图形本地写入 GraphSON。这仅在您使用 Java 时才有效,因为其他语言还不能subgraph()很好地支持。
  3. 放弃使用 Gremlin 服务器并创建一个本地JanusGraph实例,然后io()将正常工作。
于 2020-04-22T13:12:28.557 回答