Хранение графа на сервере gremlin из графа памяти - PullRequest
0 голосов
/ 05 октября 2018

Я новичок в графиках в целом.Я пытаюсь сохранить созданный мной 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, чтобы при выполнении запроса gremlin он работал на моем графике.

1 Ответ

0 голосов
/ 08 октября 2018

Все графические конфигурации в 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 Server.Открыв это, вы увидите это:

// 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 в файле конфигурации сервера с полным именем вашего экземпляра.

...