Запрос orientdb с использованием gremlin в nodejs работает нормально, но с обновлениями мне действительно нужны транзакции
Я не могу найти, как их использовать в гремлине для javascript - они реализованы?
Я ожидал, что они будут реализованы или задокументированы, но это не так. Кто-нибудь знает наверняка, прежде чем я использую представленный скрипт, которого я хочу избежать.
В качестве альтернативы есть документация или руководство о том, как отправлять запросы на основе байт-кода?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


За исключением документации в подразделе «Отправка скриптов», вся остальная документация включает отправку на основе байт-кода:
http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript
Запросы на основе байт-кода управляются транзакциями на сервере, где один запрос является одной транзакцией, что означает фиксацию в случае успеха или откат в случае сбоя. Семантика отката определяется базовой базой данных графа, которая определяет, возвращается ли все измененное состояние к тому, что было до запроса, или нет. Невозможно расширить транзакции за пределы одного запроса с помощью запросов на основе байт-кода.
Единственный способ выполнения транзакций, которые распространяются на несколько запросов, — это отправка на основе сценария, использующая сеанс. Я не думаю, что даже задокументировано, как использовать сеансы (вне Джава), поскольку это не рекомендуется по ряду причин (переносимость кода, будущее за байт-кодом, а сценарии в конечном итоге отойдут на второй план, сценарии имеют последствия для безопасности , так далее).
Я рекомендую вам переосмыслить свое приложение таким образом, чтобы вам не нужно было неявно использовать транзакции, а просто позволить серверу обрабатывать такие вещи за вас.
В самых последних выпусках 3.5.0/3.4.11 руководство по сценариям и транзакциям изменилось. Теперь можно выполнить транзакции на основе байт-кода в версии 3.5.0 с помощью Java. Эта функция будет распространена на другие языки программирования, такие как javascript, в линейке выпусков 3.5.x. 3.5.0 также представляет то, что станет более безопасным методом обработки скриптов с помощью модуль на языке гремлинов, поэтому TinkerPop в значительной степени изменил направление в отношении того, что скрипты Gremlin когда-нибудь будут удалены.
Хотя в документации все еще могут быть ссылки на предпочтительные запросы байт-кода, вы должны сделать это, потому что таким образом проще написать Gremlin на Javascript (в отличие от написания Gremlin в виде строк), а не из-за беспокойства об удалении поддержки скриптов. Единственным потенциальным ограничением для сценариев, которое мы можем увидеть в будущем, может быть удаление возможности обработки сценариев, которые включают код, отличный от Gremlin (т. е. сценарий, который содержит код Gremlin и Groovy). В зависимости от используемой вами графовой базы данных вы можете обнаружить, что такая функция даже недоступна для вас сейчас.
Благодарю. наконец-то получил оператор, работающий в одной строке, чтобы переместить подузел к новому родителю: parent.requestedParentDbId).addE(parent.edgeLabel).to(__.select('a')).select('e').drop().next(); немного затянуто, но я использовал .iterate() в качестве конечного оператора, и это вызвало ошибку сервера: ошибка null [null], которая не помогала. Кстати, о байт-коде. Мне было интересно, могу ли я построить байт-код напрямую, но смотреть дальше не имеет смысла. Спасибо за повтор и ваше время :)