Можно ли открывать транзакции в OrientDB через сервер gremlin?
Посмотрев исходный код java библиотеки orientdb-gremlin, я заметил, что это всего лишь оболочка, которая получает команды gremlin и переводит их в SQL-запросы orientdb.
Я пытаюсь использовать gremlin с orientdb в javascript (NodeJs) и для этого я использую gremlin
JS библиотека. Я могу нормально подключиться к серверу gremlin (я использую тот, который поставляется с OrientDB 3.0.14), но я пока не могу заставить транзакции работать по двум причинам:
1) gremlin
Библиотека js не имеет метода tx() в объекте Graph.
2) Я подумал: "Я могу добавить его туда, но сначала посмотрим в консоли gremlin, поддерживает ли OrientDB открытие транзакции с сервера gremlin". Так что попытка с консоли gremlin тоже не работает (помните, что я не хочу использовать orientdb-gremlin
плагин, как в javascript, я не смогу его использовать):
gremlin> :remote connect tinkerpop.server conf/remote-secure.yaml
gremlin> :> g.tx().open()
gremlin> :> g.tx().isOpen()
Эта последняя команда приводит к false
, так что транзакция не открыта.
Есть ли способ охватить транзакцию OrientDB 3.0.14 через сервер gremlin?
1 ответ
Если предположить, orientdb-gremlin
опоры g.tx()
(действительно graph.tx()
который называется g.tx()
- то есть Graph
экземпляр должен поддерживать его), тогда единственный способ использовать транзакцию из javascript - это если вы отправляете скрипты на основе строк в Gremlin Server и делаете это через сеанс. Я думаю, что это потенциально, почему вы не видите isOpen()
вернуть true
подключившись к серверу без сеанса, вы можете изменить это, выполнив:
:remote connect tinkerpop.server conf/remote.yaml session
что обсуждается здесь.
Отправка скриптов на основе строк не является рекомендуемым способом взаимодействия с Gremlin Server. Это гораздо лучший опыт разработки - просто "писать Gremlin" на своем родном языке программирования, а не встраивать Gremlin в строки. Я бы пересмотрел этот подход, если вы можете и постараться не полагаться на графические транзакции. Они делают ваш код гораздо менее переносимым.