Как получить график с поддержкой транзакций с удаленного сервера gremlin?

У меня следующая конфигурация: удаленный сервер Gremlin (TinkerPop 3.2.6) с Janus GraphDB

У меня есть gremlin-console (с плагином janus) + conf в remote.yaml: hosts: [10.1.3.2] # IP og gremlin-server host port: 8182 serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}

Итак, я хочу установить соединение через gremlin-сервер (а не напрямую с JanusGraph через graph = JanusGraphFactory.build().set("storage.backend", "cassandra").set("storage.hostname", "127.0.0.1").open();) и получить график, который поддерживает транзакции?

Является ли это возможным? Потому что, как я вижу, все графики TinkerFactory не поддерживают транзакции


person palandlom    schedule 15.11.2017    source источник
comment
Вы спрашиваете, как настроить JanusGraph на сервере Gremlin или как вы могли бы подключиться к графу транзакций и взаимодействовать с ним через удаленное соединение с сервером Gremlin?   -  person stephen mallette    schedule 16.11.2017
comment
@stephenmallette Я хотел бы знать, как взаимодействовать с JanusGraph через удаленное соединение с сервером Gremlin с поддержкой транзакций. Является ли это возможным? Есть где-нибудь пример (примеры Java / Scala / Koltin)? Спасибо   -  person Tin Ng    schedule 23.07.2018


Ответы (3)


Как я понял, чтобы использовать граф Януса через сервер gremlin, вы должны:

Определите ip и порт в конфигурационном файле консоли gremlin:

conf/remote.yaml

Подключитесь через Gremlin-console к серверу gremlin:

: remote connect tinkerpop.server conf/remote.yaml
==> Configured localhost/10.1.23.113: 8182

... и работать в удаленном режиме (используя :> или :remote console), т.е. отправлять ВСЕ команды (или @script) на gremlin-сервер.

:> graph.addVertex(...)

or

:remote console
==>All scripts will now be sent to Gremlin Server - [10.1.2.222/10.1.2.222:818]
graph.addVertex(...)

Вам не нужно определять переменные для графика и обхода, вместо этого нужно использовать

graph. - for the graph
g. - for the traversal

В этом случае вы можете использовать все функции графиков, которые предоставляет JanusGraphDB.

person palandlom    schedule 17.11.2017

Tinkerpop предоставляет объект Cluster для сохранения конфигурации соединения. Используя объект Cluster, можно создать объект graphTraversalSource.

this.cluster = Cluster.build()
                .addContactPoints("192.168.0.2","192.168.0.1")
                .port(8082)
                .credentials(username, password)
                .serializer(new GryoMessageSerializerV1d0(GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance())))
                .maxConnectionPoolSize(8)
                .maxContentLength(10000000)
                .create();
        this.gts = AnonymousTraversalSource
                .traversal()
                .withRemote(DriverRemoteConnection.using(cluster));

Объект gts является потокобезопасным. В удаленном режиме каждый запрос будет выполняться в отдельной транзакции. В идеале gts должен быть одноэлементным объектом.

Обязательно вызывайте gts.close () и cluster.close () при завершении работы приложения, иначе это может привести к утечке соединения.

person Nischal Kumar    schedule 06.02.2020

Я считаю, что подключение java-приложения к работающему серверу gremlin с использованием withRemote() не будет поддерживать транзакции. У меня тоже были проблемы с поиском информации по этому поводу, но, насколько я могу судить, если вы хотите сделать что-нибудь, кроме чтения графика, вам нужно использовать «встроенный janusgraph» и хранить ваши удаленно размещенные постоянные данные в «бэкэнде» хранилища. ", к которому вы подключаетесь из своего приложения, как вы описываете во второй половине своего вопроса. https://groups.google.com/forum/#!topic/janusgraph-users/t7gNBeWC844 В некоторых обсуждениях, которые я нашел вокруг этого здесь ^^, упоминается автоматическая фиксация отдельных транзакций в удаленном режиме, но, похоже, этого не происходит, когда я пытаюсь.

person Kyle Zimmer    schedule 28.11.2019
comment
WithRemote поддерживает транзакции, но только для 1 запроса. Каждый запрос рассматривается как отдельная транзакция. Итак, что я делаю сейчас, так это объединяю все записи и чтения в один запрос. Tinkerpop предлагает множество удивительных шагов для объединения каждого запроса в один запрос. - person Nischal Kumar; 06.02.2020