【问题标题】:Getting random records efficiently from ArangoDB从 ArangoDB 有效地获取随机记录
【发布时间】:2018-10-20 17:34:48
【问题描述】:

这是一个我想要一个高效的 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】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-06
      • 2011-07-17
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      相关资源
      最近更新 更多