arangodb - 从 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)?
关于如何获得更好结果的任何想法?
解决方案
这里的挑战是,您需要将索引与随机性结合起来,因为rocksdb 没有快速的方法来any()
为您提供集合中的随机文档。
一种好的方法是将随机值与范围比较和LIMIT
语句结合起来:
FOR g IN gigs
FILTER g.someIndexedNumber > @externalyGeneratedRandomNumber
LIMIT 25
RETURN g
您应该使用explain()
来验证您的查询实际上能够利用索引。
推荐阅读
- kotlin - 我的 kotlin 代码对列表中的最大值和最小值给出了错误的答案,我不知道为什么
- python - 使用 List Comprehension 获取前 n 项
- parallel-processing - 如何避免将多个文件加载到 ODI 12c 中的单个表中的并发错误
- javascript - 事件处理程序中的错误:TypeError:无法读取 null 的属性“数据集”
- python - 如何将张量流张量转换为字节?
- firebase - 不能在颤动中使用firebase firestore的查询进行乘法运算
- reactjs - 迁移到 Mobx 6:功能组件不适用于装饰的 observables
- addeventlistener - 无法读取 null 的属性“addeventlistener”
- r - 如何在 R 中创建带有彩色单元格的水平图?
- python - 如何转发用pip下载的库?