【问题标题】:OrientDB query friend of friend in social networkOrientDB 在社交网络中查询朋友的朋友
【发布时间】:2015-11-27 01:05:22
【问题描述】:

我有一个关于如何创建 OrientDB 查询的问题。 查询应该深入计算朋友关系的顶点。

我正在运行 OrientDB 2.1.6。

架构: Person 是一个顶点,具有属性 id (int) 朋友是优势

我要找的关系是这样的:

人 -- 朋友 --> 人 -- 朋友 --> 人 (#12:0) (#12:1) (#12:2)

我有 1 百万个顶点和 1 亿个边。 每个顶点有 100 条边和随机顶点。

我想从顶点 #12:0 开始计算在深度 2、3、4 和 5 中有多少顶点。 我想将查询性能与 Neo4j 进行比较(以毫秒为单位)。

有人可以帮助我吗? 在 OrientDB 上查询这个的最快方法是什么? 抱歉英语不好。

谢谢大家

【问题讨论】:

    标签: orientdb


    【解决方案1】:

    如果要获取深度 2 的顶点数、深度 3 的顶点数等,可以使用此查询

    select $depth,count(*) from (traverse out() from #12:0 while $depth<=5) where $depth>=2 group by $depth
    

    如果你想总结深度 2,3,4,5 有多少个顶点 你可以使用这个查询

    select count(*) from (traverse out() from #12:0 while $depth<=5) where $depth>=2
    

    【讨论】:

    • 您可能想要使用 out('Friend') 而不仅仅是 out(),因为数据库中可能还有其他类型的向外边界。
    • 更好的是,如果边缘方向在您的域中没有意义,您可以使用both('Friend')(例如,如果我是你的朋友,你也应该是我的朋友)
    • 另外,根据文档,如果你有一个固定的深度,那么你可以做 out('Friend').out('Friend') 2级深度,它会更快。
    【解决方案2】:

    试试这个:select @rid,out("Friend").size() from (traverse out() from #12:0 while $depth&lt;=5)

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      相关资源
      最近更新 更多