【问题标题】:What is the best way to count adjacent edges by their name for each vertex?按每个顶点的名称计算相邻边的最佳方法是什么?
【发布时间】:2021-09-04 17:35:10
【问题描述】:

我正在尝试通过它们的集合名称来计算相邻边。

例如,我有一个顶点集合“用户”,它的出站边到 ['visited', 'add_to_cart', 'purchased']。

对于每个顶点用户,我想通过他们的集合名称来计算相邻边。

所以最终的回报会是这样的

{ user_id : "user_1", 访问计数:3, add_to_cart_count : 5, 购买量:1 }

我已经尝试过以下查询,但我怀疑它使用 if else 条件时性能是否最佳,我猜它会妨碍整体性能。

我试过的查询:

FOR user IN User
   FOR v, e, p IN OUTBOUND user visited, add_to_cart, purchased
      COLLECT user_id = user.user_id
         AGGREGATE 
            visit_count = SUM(SPLIT(e._id, '/')[0] == 'visited'? 1 : 0),     
            add_to_cart_count = SUM(SPLIT(e._id, '/')[0] == 'add_to_cart'? 1 : 0),
            purchase_cnt = SUM(SPLIT(e._id, '/')[0] == 'purchased'? 1 : 0) 
     
      RETURN {
         user_id, visit_count, add_to_cart_count, purchase_cnt 
      }  
                  

如果这是最好的方法,我可以利用任何与索引相关的收益吗?

期待您的帮助:)

谢谢。

【问题讨论】:

    标签: arangodb aql


    【解决方案1】:

    感谢 arangoDB 社区的 tobias,我可以让它快 30%。

    LET vis = (FOR e IN visited COLLECT user_id = e._from WITH COUNT INTO n RETURN {user_id, visit_count: n})
    LET cart = (FOR e IN add_to_cart COLLECT user_id = e._from WITH COUNT INTO n RETURN {user_id, add_to_cart_count: n})
    LET purc = (FOR e IN purchased COLLECT user_id = e._from WITH COUNT INTO n RETURN {user_id, purchase_cnt: n})
    FOR x IN UNION(vis, cart, purc)
    COLLECT user_id = x.user_id AGGREGATE visit_count = SUM(x.visit_count), add_to_cart_count = SUM(x.add_to_cart_count), purchase_cnt = SUM(x.purchase_cnt)
    RETURN {user_id, visit_count, add_to_cart_count, purchase_cnt}
    

    他提到的一点是直接收集边缘集合!

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2019-01-24
      • 2020-02-13
      • 1970-01-01
      • 2010-09-20
      • 2014-07-24
      • 2011-02-13
      • 2010-10-03
      • 1970-01-01
      相关资源
      最近更新 更多