【问题标题】:How to limit parsing depth using Tinkerpop Frames如何使用 Tinkerpop Frames 限制解析深度
【发布时间】:2015-03-28 11:40:58
【问题描述】:

您好,我有一个接口和一个相应的实现类,例如:

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 类的两个顶点之间存在关系,可能存在图循环。有没有办法通过注释或其他方式(例如通过管理器)定义在特定 @Adjacency 的 x 步后停止,这样就不会永远存在?如果@GremlinGroovy (https://github.com/tinkerpop/frames/wiki/Gremlin-Groovy) 注释是答案,你能举个例子吗?

【问题讨论】:

  • 没有足够的信息来重现此问题。请提供您正在使用的库的版本。 (重要,因为com.tinkerpop.blueprints:blueprints-orient-graph:2.4.0 库中没有getVertexByKey 方法。我怀疑您的问题可能是这样的:“getVertexByKey() 不起作用”-github.com/orientechnologies/orientdb/issues/3128

标签: neo4j orientdb gremlin tinkerpop tinkerpop-frames


【解决方案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'

【讨论】:

  • 至少在我使用 orientdb 的情况下,它会创建一个无限循环。另外,我不想获取它下面的整个图表。我想以某种方式限制返回的深度
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2013-03-30
  • 1970-01-01
  • 2019-12-05
  • 2016-02-03
  • 1970-01-01
相关资源
最近更新 更多