[英]ArangoDB - Performance issue with AQL query
我正在通过Strongloop将ArangoDB用于Web应用程序。 运行此查询时遇到一些性能问题:
FOR result IN Collection SORT result.field ASC RETURN result
我添加了一些索引来加快查询速度,例如对已排序字段进行skiplist
索引。
我的收藏夹中有超过100万条记录 。
该应用程序托管在Google Cloud的n1-highmem-2上。 以下是一些规格:
不幸的是,我的查询花了很多时间才能结束。 我能做什么?
最好的问候,卡梅洛
总结以上讨论:
如果field
属性上存在一个跳过列表索引,则可以将其用于排序。 但是,如果它创建的稀疏则不能。 可以通过运行来重新验证
db.Collection.getIndexes();
在ArangoShell中。 如果索引存在且不稀疏,则查询应使用索引进行排序,并且不需要其他排序-可以使用Explain重新进行验证。 但是,查询仍将在内存中建立巨大的结果,这将花费时间并消耗RAM。
如果需要较大的结果集,则可以使用LIMIT
检索多个块中的结果切片,这将减少对计算机的压力。
例如,第一次迭代:
FOR result IN Collection SORT result.field LIMIT 10000 RETURN result
然后脱机处理这些前10,000个文档,并记下最后处理的文档的结果值。 现在再次运行查询,但是现在有了附加的FILTER:
FOR result IN Collection
FILTER result.field > @lastValue LIMIT 10000 RETURN result
直到没有其他文件为止。 如果result.field
是唯一的,那应该可以正常工作。
如果result.field
不是唯一的并且result.field
涵盖的集合中没有其他唯一键,则所描述的方法将至少是一个近似值。
还要注意,将查询拆分为多个块时,这不会提供快照隔离,但是根据使用情况,它可能已经足够好了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.