#gremlin
Вопрос:
Предполагая, что у меня есть произвольный запрос Gremlin, которым я не управляю в качестве входных данных, и база данных графиков, с которой я его запускаю, как я могу захватить пути всех доступных узлов в графике, например, как я могу видеть, какие части графика необходимы для произвольного запроса?
Пояснение: Если я выполняю произвольный запрос, как я могу захватить все доступные данные во время выполнения запроса, не только результат, но и все данные, к которым был получен доступ во время запроса.
Ответ №1:
В разных базах данных могут быть параметры плана объяснения, которые дают некоторое представление о том, как будет выполняться запрос, но на самом деле единственный способ узнать, какой запрос Gremlin потребуется просмотреть на графике, — это запустить его. Если вы знаете схему графика, вы потенциально можете написать некоторый код, который анализирует запрос, чтобы просмотреть различные шаги и метки, используемые для оценки того, к чему будет прикасаться запрос, но я не знаю ни о каких существующих инструментах, которые это делают.
Комментарии:
1. Это нормально, чтобы выполнить запрос, но как захватить все части графика, которые необходимы при его запуске?
2. Не все запросы Гремлина возвращают все, к чему они прикасаются. В некоторых случаях добавление
path
шага к запросу вернет все, что было затронуто, но на самом деле это полностью зависит от запроса. Например, если запросg.V().out().out()
выполнен, он вернет только конечные вершины, ноg.V().out().out().path()
вернет каждую посещенную вершину. Однако для такого запросаg.V().out().out().count()
такой трюк не сработал бы.3. Да, точно, так как же получить все пути к данным, необходимым для запроса?
4. Без переписывания запросов на самом деле нет простого способа сделать это.
5. Нет ли способа отладить запрос, когда он выполняется для регистрации всех доступных узлов?