如何使用 Remote Traversal 生成用于导出的 GraphSON 数据?

How to generate GraphSON data for export with Remote Traversal?

示例代码(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 格式导出图形?

谢谢。

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

  1. 发送一个脚本,然后在服务器上实例化一个 GraphSONWriter,然后提供 writeGraph() 一个 OutputStream,它将写入 byte[]String 并且然后 return 给你的客户。
  2. 我假设这是一个可能适合内存的 "small" 图,所以只需 g.E().subgraph('sg').cap('sg') 并将整个图复制到子图。这将在客户端上为您提供一个 TinkerGraph 并且您可以从那里使用 io() 将图形本地写入 GraphSON。这仅在您使用 Java 时有效,因为其他语言尚不支持 subgraph()
  3. 放弃使用 Gremlin 服务器并创建本地 JanusGraph 实例,然后 io() 将正常工作。