Как сгенерировать данные GraphSON для экспорта с помощью Remote Traversal? - PullRequest
0 голосов
/ 20 апреля 2020

Пример кода (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 с удаленного сервера. Но шаг ввода-вывода не обеспечивает функциональность для удаленного экспорта. С GraphSonWriter, он не пишет содержимое должным образом. Как я могу экспортировать график в формате GraphSON в среде удаленного сервера?

Спасибо.

1 Ответ

2 голосов
/ 22 апреля 2020

До тех пор, пока TinkerPop не обеспечит лучшую поддержку шага g.io() для удаленных сред, он все еще будет работать только для локального чтения и записи, где происходит выполнение Gremlin. Если вы хотите экспортировать график в GraphSON из удаленного источника, есть несколько вариантов в зависимости от того, какой график вы используете. Вы пометили этот вопрос с помощью JanusGraph, поэтому я сосредоточусь на этом. Вы можете:

  1. отправить сценарий, который создает экземпляр GraphSONWriter на сервере, а затем предоставить writeGraph() OutputStream, который будет записывать в byte[] или String и затем возвращать это вашему клиенту.
  2. Я предполагаю, что это "маленький" граф, который, вероятно, поместится в памяти, поэтому просто сделайте g.E().subgraph('sg').cap('sg') и скопируйте весь граф в подграф. Это даст вам TinkerGraph на клиенте, и оттуда вы можете использовать io(), так как вам нравится писать график локально в GraphSON. Это работает, только если вы используете Java, так как другие языки еще не поддерживают subgraph().
  3. Для go использования Gremlin Server и создания локального JanusGraph экземпляра, а затем io() будет работать как обычно.
...