使用OrientDB获得所有前任的最有效方法

时间:2014-10-14 17:38:53

标签: tree orientdb

我有一个“经典”树结构,以OrientDB为模型。

  • 一个根节点,ROOT
  • ROOT作为父节点的几个节点,A,B,C ......这些节点具有传出关系(标签为“hasParent”)到ROOT
  • 子节点A1,A1,B1,...都具有传出关系(标签为“hasParent”)到A,B,......

我想要的是在第2级查询(在一个查询中)特定节点并以最有效的方式获取所有前任

我有类似的东西:

> traverse out('hasParent') from (select from category where code='B2')

这是最有效的方法吗?

1 个答案:

答案 0 :(得分:1)

此查询非常有效(O(logN),其中N是" category" class)中的节点数,如果您在category.code上定义了索引

无论如何,如果你知道B2的RID(假设它是#10:1),你可以写一个更快的查询:

traverse out('hasParent') from #10:1

此查询的成本为O(1)(恒定时间,不依赖于图形的大小,而只取决于结果集的大小)

所有这一切当然如果你知道ROOT没有父母,但如果它不是真的并且你想限制遍历深度,你可以写一个"而#34;遍历条件,就像这样

从#10:1遍历(' hasParent')而$ depth< 3