从ArangoDB有效地获取随机记录

时间:2018-10-20 17:34:49

标签: arangodb aql

这是我想要有效的AQL命令的问题。

ArangoDB 3.4.0-RC.1,RocksDB存储引擎

收藏演出有33,000条记录

我在_key上有一个主索引

我想做的是以下事情:

我想从集合中抽取25条随机记录。

我看了以下我可以做的事情:

FOR g IN gigs
  SORT RAND()
  LIMIT 25
  RETURN g

这在我的机器上耗时2.8秒。

RETURN NTH(gigs, 30)

用随机数代替30。

这也需要3秒钟。

我不知道是否可能,但是我可以告诉它从主索引中选择第n条记录吗(_key是我真正需要的)?

关于如何获得更好结果的任何想法?

1 个答案:

答案 0 :(得分:0)

这里的挑战是,您需要将索引与随机性结合起来,因为rocksdb并没有使any()在集合中为您提供随机文档的快速方法。

一种好的方法是将随机值与范围比较和LIMIT语句组合在一起:

FOR g IN gigs
  FILTER g.someIndexedNumber > @externalyGeneratedRandomNumber
  LIMIT 25
  RETURN g

您应使用explain()来验证您的查询是否确实能够利用索引。