Как ограничить глубину разбора с помощью Tinkerpop Frames

Привет у меня есть интерфейс и соответствующий класс реализации, как:

public interface IActor extends VertexFrame {

    @Property(ActorProps.nodeClass)
    public String getNodeClass();

    @Property(ActorProps.nodeClass)
    public void setNodeClass(String str);

    @Property(ActorProps.id)
    public String getId();

    @Property(ActorProps.id)
    public void setId(String id);

    @Property(ActorProps.name)
    public String getName();

    @Property(ActorProps.name)
    public void setText(String text);

    @Property(ActorProps.uuid)
    public String getUuid();

    @Property(ActorProps.uuid)
    public void setUuid(String uuid);

    @Adjacency(label = RelClasses.CoActors, direction = Direction.OUT)
    public Iterable<IActor> getCoactors();
}

И я использую OrientDB с ним, который выглядит примерно так. У меня была похожая реализация с Neo4j:

Graph graph = new OrientGraph("remote:localhost/actordb");
FramedGraph<Graph> manager = new FramedGraphFactory().create(graph);
IActor actor = manager.frame(((OrientGraph)graph).getVertexByKey("Actor.uuid",uuid), IActor.class);

Выше работает, но проблема в том, что в этом случае или аналогичном, потому что существует связь между двумя вершинами класса Actor, потенциально может быть петля графа. Есть ли способ определить с помощью Annotation или каким-либо другим способом (например, через Manager) остановиться после x шагов для конкретной @Adjacency, чтобы это не продолжалось вечно? Если ответ @GremlinGroovy ( https://github.com/tinkerpop/frames/wiki/Gremlin-Groovy) является ответом, не могли бы вы привести пример?

1 ответ

Я не уверен, что понимаю вопрос / проблему. (Вы говорите "потенциально", но на самом деле не доказали, что есть проблема!)

  • Проблема в том, что в Vertex/Frames есть цикл, и (вы думаете) загрузка объекта приведет к бесконечному циклу?
  • Удалось ли вам доказать, что существует проблема загрузки вершины / фрейма с помощью цикла? (покажи мне код / ​​проблему)

Насколько я понимаю, трубопроводы будут lazy-load объекты (загружать только тогда, когда требуется). Кадры (я представляю) загружают только соседние кадры, когда это требуется. На самом деле, насколько я могу судить, проблем нет.

Пример (Groovy)

// create some framed vertices
Person nick = createPerson(name: 'Nick')
Person michail = createPerson(name: 'Michail')

// create a recursive loop
nick.addKnows(michail)
michail.addKnows(nick)

// handles recursion = true!
Person nick2 = framedGraph.getVertex(nick.asVertex().id, Person)
assert nick2.knows.knows.knows.knows.knows.name == 'Michail'
Другие вопросы по тегам