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

问题描述 投票:0回答:1

我正在研究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()在开始时需要相当长的时间。我想它首先随机排序所有可能的解决方案,然后返回解决方案。

你认为,有一种方法可以让随机解决方案花费更少的时间吗?

感谢您的时间和期待答案

arangodb aql random-walk
1个回答
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. 迭代得到你想要的深度的随机游走。
© www.soinside.com 2019 - 2024. All rights reserved.