如何使用 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 标记了这个问题,所以我会专注于此。你可以:
- 发送一个脚本,然后在服务器上实例化一个
GraphSONWriter
,然后提供 writeGraph()
一个 OutputStream
,它将写入 byte[]
或 String
并且然后 return 给你的客户。
- 我假设这是一个可能适合内存的 "small" 图,所以只需
g.E().subgraph('sg').cap('sg')
并将整个图复制到子图。这将在客户端上为您提供一个 TinkerGraph
并且您可以从那里使用 io()
将图形本地写入 GraphSON。这仅在您使用 Java 时有效,因为其他语言尚不支持 subgraph()
。
- 放弃使用 Gremlin 服务器并创建本地
JanusGraph
实例,然后 io()
将正常工作。
示例代码(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 标记了这个问题,所以我会专注于此。你可以:
- 发送一个脚本,然后在服务器上实例化一个
GraphSONWriter
,然后提供writeGraph()
一个OutputStream
,它将写入byte[]
或String
并且然后 return 给你的客户。 - 我假设这是一个可能适合内存的 "small" 图,所以只需
g.E().subgraph('sg').cap('sg')
并将整个图复制到子图。这将在客户端上为您提供一个TinkerGraph
并且您可以从那里使用io()
将图形本地写入 GraphSON。这仅在您使用 Java 时有效,因为其他语言尚不支持subgraph()
。 - 放弃使用 Gremlin 服务器并创建本地
JanusGraph
实例,然后io()
将正常工作。