Путь захвата всех доступных узлов в произвольном запросе Gremlin

#gremlin

Вопрос:

Предполагая, что у меня есть произвольный запрос Gremlin, которым я не управляю в качестве входных данных, и база данных графиков, с которой я его запускаю, как я могу захватить пути всех доступных узлов в графике, например, как я могу видеть, какие части графика необходимы для произвольного запроса?

Пояснение: Если я выполняю произвольный запрос, как я могу захватить все доступные данные во время выполнения запроса, не только результат, но и все данные, к которым был получен доступ во время запроса.

Ответ №1:

В разных базах данных могут быть параметры плана объяснения, которые дают некоторое представление о том, как будет выполняться запрос, но на самом деле единственный способ узнать, какой запрос Gremlin потребуется просмотреть на графике, — это запустить его. Если вы знаете схему графика, вы потенциально можете написать некоторый код, который анализирует запрос, чтобы просмотреть различные шаги и метки, используемые для оценки того, к чему будет прикасаться запрос, но я не знаю ни о каких существующих инструментах, которые это делают.

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

1. Это нормально, чтобы выполнить запрос, но как захватить все части графика, которые необходимы при его запуске?

2. Не все запросы Гремлина возвращают все, к чему они прикасаются. В некоторых случаях добавление path шага к запросу вернет все, что было затронуто, но на самом деле это полностью зависит от запроса. Например, если запрос g.V().out().out() выполнен, он вернет только конечные вершины, но g.V().out().out().path() вернет каждую посещенную вершину. Однако для такого запроса g.V().out().out().count() такой трюк не сработал бы.

3. Да, точно, так как же получить все пути к данным, необходимым для запроса?

4. Без переписывания запросов на самом деле нет простого способа сделать это.

5. Нет ли способа отладить запрос, когда он выполняется для регистрации всех доступных узлов?