Как отделить несколько экземпляров графа друг от друга в JanusGraph - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь создать несколько экземпляров графа в Janusgraph, но все они, похоже, имеют одинаковые ссылки друг на друга, и поэтому любое действие, выполняемое с одним, влияет на другие (см. Пример ниже).Я хочу, чтобы эти графики были настроены как отдельные экземпляры, отличные друг от друга, но где-то в шагах ниже я колеблюсь.

Шаги, предпринятые для добавления нового графика в JanusGraph

Цель: иметь два графика с именами graph1, graph2, с объектами обхода с именами g1, g2 соответственно икоторые отличаются друг от друга.

  1. Создание файлов свойств с именами graph1.properties, graph2.properties.С содержимым (для бэкэнда Cassandra):

    gremlin.graph=org.janusgraph.core.JanusGraphFactory
    gremlin.graph=org.janusgraph.core.ConfiguredGraphFactory
    storage.backend=cql
    storage.hostname=127.0.0.1
    

^ Здесь я предполагаю, что основная проблема заключается - graph1.properties и graph2.properties имеют одинаковыесодержимое ... но я не уверен, что изменить

Добавить графики в файл gremlin-server.yaml, который сопоставляется с недавно созданными файлами graph1.properties и graph2.properties.

graphs: {
    graph1: conf/gremlin-server/graph1.properties,
    graph2: conf/gremlin-server/graph2.properties
}

Добавить имена объектов обходана empty-sample.groovy

globals << [g1 : graph1.traversal(), g2: graph2.traversal()]

Тестирование

Вывод ниже показывает, что графики были созданы успешно, но также показывает, что они ссылаются друг на друга.

==>Configured localhost/127.0.0.1:8182-[b7696535-97d9-4b59-b30f-f83707492057]
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182]-[b7696535-97d9-4b59-b30f-f83707492057] - type ':remote console' to return to local mode
gremlin> g1
==>graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]], standard]
gremlin> g1.V().count()
==>100
gremlin> g2.V().count()
==>100
gremlin> g1.addV('item').property('id', '123')
==>v[327684312]
gremlin> g1.tx().commit()
==>null
gremlin> g1.V().count()
==>101
gremlin> g2.V().count()
==>101                  <-- g2 should have remained at 100

1 Ответ

1 голос
/ 20 июля 2019

Поскольку вы используете Cassandra для хранения ваших данных, чтобы полностью отделить два графика друг от друга, вам необходимо использовать отдельное пространство ключей Cassandra для каждого графика, поскольку это единица хранения, которую использует JanusGraph.

Как вы можете видеть в документах JanusGraph Cassandra :

  • keyspace : имя пространства ключей для хранения графа JanusGraph. Позволяетнесколько графов JanusGraph сосуществуют в одном и том же кластере Cassandra.

Рассматривая Ссылку конфигурации JanusGraph , мы видим дополнительную информацию об этом параметре конфигурации:

  • name: storage.cassandra.keyspace
  • description: "Имя пространства ключей JanusGraph. Оно будет создано, если его не существует. Если оно не задано, но graph.graphname является, тогда для пространства ключей будет установлено это значение. "
  • тип данных: String
  • значение по умолчанию: janusgraph
  • изменчивость: LOCAL

Итак, не указав этот пунктметр в вашей конфигурации, оба графика хранятся в стандартном janusgraph пространстве клавиш, что вызывает их конфликт друг с другом.

Чтобы разделить два графика, просто предоставьте явный параметр storage.cassandra.keyspace, который отличается длякаждый из графиков, которые вы хотите отделить друг от друга.

...