首页 > 解决方案 > 从 ArangoDB 有效地获取随机记录

问题描述

这是一个我想要一个有效的 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)?

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

标签: arangodbaql

解决方案


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

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

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

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


推荐阅读