ArangoDB - AQL 查询的性能问题

ArangoDB - Performance issue with AQL query

我正在通过 Strongloop 将 ArangoDB 用于 Web 应用程序。 当我 运行 这个查询时,我遇到了一些性能问题:

FOR result IN Collection SORT result.field ASC RETURN result

我添加了一些索引来加快查询速度,例如 skiplist 排序字段上的索引。

我的Collection里面有超过1M的记录.

该应用程序托管在 n1-highmem-2 上 Google 云端。 低于一些规格:

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

此致, 卡梅隆

总结以上讨论:

如果 field 属性上存在跳过列表索引,则可以将其用于排序。但是,如果它 created sparse 它不能。这可以通过 运行ning

重新验证
db.Collection.getIndexes();

在 ArangoShell 中。如果索引存在且非稀疏,则查询应使用索引进行排序并且不需要额外的排序 - 这可以重新验证 using 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 不是唯一的,并且在跳过列表涵盖的集合中没有其他唯一键,那么所描述的方法将至少是一个近似值。

另请注意,将查询拆分为块时,这不会提供快照隔离,但根据用例,它可能已经足够好了。