【问题标题】:Most efficient way to get all predecessors with OrientDB使用 OrientDB 获取所有前辈的最有效方法
【发布时间】:2014-10-14 17:38:52
【问题描述】:

我有一个“经典”树结构,在 OrientDB 中建模。

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

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

我有类似的东西:

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

这是最有效的方法吗?

【问题讨论】:

    标签: tree orientdb


    【解决方案1】:

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

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

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

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

    当然,如果你知道 ROOT 没有父级,但如果它不是真的并且你想限制遍历深度,你可以在遍历上写一个“while”条件,像这样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2020-03-08
      • 2011-04-03
      • 2015-10-29
      相关资源
      最近更新 更多