Я пытаюсь найти эффективный запрос gremlin, который возвращает обход с вершиной и количеством исходящих ребер.Или даже лучше вместо числа исходящих ребер - логическое значение, если исходящие ребра существуют или нет.
Справочная информация: я пытаюсь улучшить производительность программы, которая записывает некоторые свойства в вершины, а затем выполняет итерацию по исходящимкрая, чтобы удалить часть этого.Во многих случаях отсутствуют исходящие ребра, и итерация for (Iterator<Edge> iE = v.edges(Direction.OUT); iE.hasNext();) { ... }
занимает значительную часть времени выполнения.Поэтому вместо преобразования идентификаторов в вершины (с помощью gts.V(ids)
я хочу собрать информацию о существовании исходящих ребер, чтобы пропустить итерацию, если это возможно.
Моя первая попытка была:
gts.V(ids).as("v").choose(__.outE(), __.constant(true), __.constant(false)).as("e").select("v", "e");
Вторая идея была такой:
gts.V(ids).project("v", "e").by().by(__.outE().count());
Кажется, что оба работают, но есть лучшее решение, которое не требует базовой реализации графа для выборки илисчитать все ребра?
(В настоящее время мы используем реализацию sqlg для tinkerpop / gremlin с Postgresql, и оба запроса, похоже, извлекают все исходящие ребра из Postgresql. Это может быть в случае, когда некоторая оптимизация отсутствует. Но мой вопросне является специфичным для sqlg.)