繁体   English   中英

ArangoDB-AQL查询的性能问题

[英]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上。 以下是一些规格:

  • 2个CPU-Xeon E5 2.3Ghz
  • 13 GB的RAM
  • 10GB固态硬盘

不幸的是,我的查询花了很多时间才能结束。 我能做什么?

最好的问候,卡梅洛

总结以上讨论:

如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM