транзакции gremlin javascript

#javascript #node.js #gremlin

#javascript #node.js #gremlin

Вопрос:

Запрос orientdb с использованием gremlin в nodejs работает нормально, но с обновлениями мне действительно нужны транзакции

Я не могу найти, как их использовать в gremlin для javascript — реализованы ли они?

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

В качестве альтернативы, есть ли документация или руководство о том, как отправлять запросы на основе байт-кода?

Ответ №1:

За исключением случаев, когда документация в подразделе «Отправка сценариев», вся остальная документация включает отправку на основе байт-кода:

http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript

Запросы на основе байт-кода — это транзакции, управляемые на сервере, где один запрос — это одна транзакция, что означает, что при успешном выполнении происходит фиксация или откат при сбое. Семантика отката определяется базовой базой данных graph, которая определяет, возвращается ли все измененное состояние к тому, каким оно было до запроса, или нет. Нет способа расширить транзакции за пределы одного запроса с помощью запросов на основе байт-кода.

Единственный способ выполнять транзакции, которые распространяются на несколько запросов, — это отправлять сообщения на основе скриптов, которые используют сеанс. Я не думаю, что это даже документировано, как использовать сеансы (за пределами Java), поскольку это не рекомендуемый подход по целому ряду причин (переносимость кода, байт-код — это будущее, а скрипты в конечном итоге отойдут на второй план, скрипты имеют последствия для безопасности и т.д.).

Я рекомендую вам переосмыслить ваше приложение таким образом, чтобы вам не нужно было неявно использовать транзакции и просто позволить серверу обрабатывать такие вещи за вас.

Начиная с самых последних выпусков 3.5.0 / 3.4.11, руководство по скриптам и транзакциям изменилось. Теперь в версии 3.5.0 можно выполнять транзакции на основе байт-кода с использованием Java. Эта функция будет распространена на другие языки программирования, такие как javascript, в линейке версий 3.5.x. 3.5.0 также представляет то, что станет лучшим и более безопасным методом обработки скриптов с помощью языкового модуля gremlin, поэтому TinkerPop в значительной степени изменил направление в отношении позиции, согласно которой скрипты Gremlin когда-нибудь будут удалены.

Хотя в документации все еще могут быть ссылки на предпочтение запросов байт-кода, вам следует сделать это, потому что таким образом проще написать Gremlin на Javascript (в отличие от написания Gremlin в виде строк), а не из-за опасения, что поддержка скриптов будет удалена. Единственным потенциальным ограничением скриптов, которое мы можем увидеть в будущем, может быть удаление возможности обрабатывать скрипты, которые включают код, отличный от Gremlin (то есть скрипт, содержащий как Gremlin, так и Groovy-код). В зависимости от используемой вами базы данных graph вы можете обнаружить, что такая функция даже недоступна вам сейчас.

Комментарии:

1. Спасибо. наконец-то получил инструкцию, работающую в одной строке для перемещения подузла к новому родительскому: await this.g.E(parent.existingEdgeDbId).as(‘e’).inV().as(‘a’).V(parent.requestedParentDbId).addE(parent.edgeLabel).to(__.select(‘a’)). select(‘e’).drop().next(); немного затянуто, но я использовал .iterate() в качестве конечного оператора, и это вызвало ошибку сервера: null [нулевая] ошибка, которая не помогла. кстати, о байт-коде, мне было интересно, могу ли я создать байт-код напрямую, но смотреть дальше не имеет смысла. Спасибо за воспроизведение и потраченное время 🙂