WedX - журнал о программировании и компьютерных науках

Как отделить несколько экземпляров графа друг от друга в JanusGraph

Я пытаюсь создать несколько экземпляров графа в 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 имеют одинаковое содержимое ... но я не уверен, что изменить

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

    graphs: {
        graph1: conf/gremlin-server/graph1.properties,
        graph2: conf/gremlin-server/graph2.properties
    }
    
  2. Добавьте имена объектов обхода в 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

  • См. Мой обновленный ответ; поскольку вы используете storage.backend=cql, вам нужно установить storage.cql.keyspace вместо storage.cassandra.keyspace в вашем config. 24.07.2019

Ответы:


1

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

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

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

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

  • имя: storage.cql.keyspace
  • description: «Имя пространства ключей JanusGraph. Если его не существует, оно будет создано».
  • тип данных: String
  • значение по умолчанию: janusgraph
  • изменчивость: LOCAL

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

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

20.07.2019
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]