从ArangoDB有效地获取随机记录

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

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

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

Collection Gigs有33,000条记录

我在_key上有一个主索引

我想做的是以下内容:

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

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

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

这在我的机器上大约需要2.8秒。

RETURN NTH(gigs, 30)

其中30将被随机数替换。

它还需要3秒钟。

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

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

arangodb aql
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.