【问题标题】:ArangoDB - Performance issue with AQL queryArangoDB - AQL 查询的性能问题
【发布时间】:2015-10-29 15:40:58
【问题描述】:

我正在通过 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 内存
  • 10GB 固态硬盘

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

最好的问候, 卡梅罗

【问题讨论】:

  • 如果field属性上有skiplist索引,你能检查它是否是稀疏索引吗?您可以通过在 ArangoShell 中运行 db.Collection.getIndexes(); 来查找。如果索引存在且非稀疏,则查询应使用索引进行排序,不需要额外的排序。但是,查询结果仍将包含 1,000,000 个文档,构建此结果集肯定需要一些时间和内存。是否真的需要一次查询一次检索所有 1M 文档?
  • 我已经尝试过使用稀疏索引。
  • 如果索引是稀疏的,它可以用于这个查询。如果索引是非稀疏的,它可以用来按排序顺序遍历文档,这将消除SORT 步骤,因为排序已经由索引提供。但是,查询仍然会在内存中构建一个巨大的结果,这将花费时间并消耗 RAM。是否有可能将查询结果限制为某些文档,即使用FILTER?否则,您将始终将整个 1M 文档导出给客户,客户可能无法处理该数量。
  • 没有稀疏索引它可以工作(索引匹配)。但是如果我想要一个大的结果集,因为我必须批量做一些事情,我该怎么办?
  • 如果结果集很大,那么构建它肯定需要时间和内存。为避免这种情况,您可以使用LIMIT 将查询拆分为多个块。例如,第一次迭代:FOR result IN Collection SORT result.field LIMIT 10000 RETURN result。然后离线处理前 10,000 个文档,并记下最后处理的文档的 result 值。现在再次运行查询,但现在使用额外的过滤器:FOR result IN Collection FILTER result.field > @lastValue LIMIT 10000 RETURN result,直到没有更多文档。如果 result.field 是唯一的,那应该可以正常工作。

标签: node.js performance arangodb aql nosql


【解决方案1】:

总结以上讨论:

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

db.Collection.getIndexes();

在 ArangoShell 中。如果索引存在且非稀疏,则查询应使用索引进行排序,并且不需要额外的排序 - 可以重新验证using Explain。 但是,查询仍然会在内存中构建一个巨大的结果,这将需要时间并消耗 RAM。

如果需要较大的结果集,LIMIT 可用于检索多个块中的结果切片,这将减少对机器的压力。

例如,第一次迭代:

FOR result IN Collection SORT result.field LIMIT 10000 RETURN result

然后离线处理这前 10,000 个文档,并记下最后处理的文档的结果值。 现在再次运行查询,但现在多了一个过滤器:

FOR result IN Collection
  FILTER result.field > @lastValue LIMIT 10000 RETURN result

直到没有更多的文件。如果 result.field 是唯一的,那应该可以正常工作。

如果result.field 不是唯一的,并且跳过列表所涵盖的集合中没有其他唯一键,那么所描述的方法将至少是一个近似值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多