Сохранение графика на сервер gremlin из графика памяти

Я новичок в Graphs в целом. Я пытаюсь сохранить динамически созданный мною TinkerPopGraph на сервере gremlin, чтобы иметь возможность выдавать ему запросы gremlin.

Рассмотрим следующий код:

    Graph inMemoryGraph;
    inMemoryGraph = TinkerGraph.open();
    inMemoryGraph.io(IoCore.graphml()).readGraph("test.graphml");
    GraphTraversalSource g = inMemoryGraph.traversal();

    List<Result> results = 
      client.submit("g.V().valueMap()").all().get();

Мне нужен код клея. Запрос gremlin здесь выдается против графика modern, который является привязкой по умолчанию для переменной g. Я хотел бы как-то сохранить свой inMemoryGraph, чтобы при запуске запроса гремлина он работал с моим графиком.


person learnAndImprove    schedule 05.10.2018    source источник


Ответы (1)


Все конфигурации графа в Gremlin Server должны происходить через его файл конфигурации YAML. Поскольку вы говорите, что подключены к современному графу, я предполагаю, что вы используете «современный» конфигурационный файл по умолчанию, который поставляется со стандартным дистрибутивом Gremlin Server. В таком случае вам следует посмотреть conf/gremlin-server-modern.yaml. Вы заметите, что это:

graphs: {
  graph: conf/tinkergraph-empty.properties}

Это создает Graph ссылку в Gremlin Server под названием «граф», на которую вы можете ссылаться из скриптов. Затем обратите внимание на эту вторую конфигурацию:

org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/generate-modern.groovy]}}}

В частности, обратите внимание на scripts/generate-modern.groovy, который является сценарием инициализации сервера Gremlin. Открыв это, вы увидите это:

// an init script that returns a Map allows explicit setting of global bindings.
def globals = [:]

// Generates the modern graph into an "empty" TinkerGraph via LifeCycleHook.
// Note that the name of the key in the "global" map is unimportant.
globals << [hook : [
  onStartUp: { ctx ->
    ctx.logger.info("Loading 'modern' graph data.")
      org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory.generateModern(graph)
  }
] as LifeCycleHook]

// define the default TraversalSource to bind queries to - this one will be named "g".
globals << [g : graph.traversal()]

Комментарии должны делать большую часть объяснения. Связь здесь заключается в том, что вам нужно вставить код инициализации вашего графа в этот скрипт и присвоить свой inMemoryGraph.traversal() g или любое другое имя переменной, которое вы хотите использовать для ее идентификации на сервере. Все это описано в справочной документации.

Есть способ сделать эту работу более динамичной, но он предполагает расширение Gremlin Server через его интерфейсы. Вам придется создать собственный GraphManager - интерфейс можно найти здесь. Затем вы должны установить ключ graphManager в файле конфигурации сервера с полным именем вашего экземпляра.

person stephen mallette    schedule 08.10.2018
comment
спасибо, Стивен, я попробую ваши предложения и сообщу здесь. - person learnAndImprove; 08.10.2018