如何在arangodb中进行有效的随机游走?

时间:2019-04-24 10:09:44

标签: arangodb aql random-walk

我正在ArangoDB上的图形数据库上工作,我试图通过随机游走建立路径。我的目的是从起始顶点V开始,例如,我获得了4条具有指定深度的随机路径。

到目前为止,我发现以下代码有效:

FOR vertex, edge, path IN 4..4 ANY 'Vertex/417438' edge_collection OPTIONS {bfs: TRUE, uniqueVertices : True, uniqueEdges : True}
    SORT RAND()
    LIMIT 3
    FILTER  IS_SAME_COLLECTION('Vertex', vertex)
    RETURN path

这确实给了我3条深度为4的路径,但是由于开始时使用了SORT RAND(),因此花费了相当长的时间。我想它首先会对所有可能的解决方案进行随机排序,然后返回该解决方案。

您认为,有一种方法可以产生耗时更少的随机解决方案?

感谢您的时间和未来的答案

1 个答案:

答案 0 :(得分:0)

我刚刚与Arango开发团队的成员进行了讨论。目前尚无法在AQL中获得随机节点。它在那里,但是有路线图。

虽然我找到了一种在ArangoDB上进行随机遍历的方法。

让我们以v作为起始顶点。

  1. 使用以下命令查询N的邻居v的数量:

    FOR clip, edge, path IN ANY '${vertex}' hasClipped OPTIONS {bfs: TRUE, uniqueVertices : True, uniqueEdges : True}
                            COLLECT WITH COUNT INTO len
                            RETURN len
    
  2. 然后从0到rd之间选择一个随机数N并执行以下请求:

    FOR obj IN ANY '${vertex}' hasClipped OPTIONS {bfs : true, uniqueVertices : 'path'}
                            LIMIT ${rd}, 1
                            RETURN obj
    

    此请求将返回现有邻居中的一个随机邻居。

  3. 迭代以您想要的深度随机行走。