首页 > 解决方案 > 聚合并发的 AWS DocumentDB 性能问题

问题描述

我在 AWS 中使用 DocumentDB,当我尝试从不同的聚合查询中同时读取同一个集合时遇到了麻烦。

问题不在于我无法从数据库中读取,而是需要花费大量时间来完成查询。我是同时触发查询还是一个接一个触发都没有关系。

我正在使用带有 NodeJS 的 Lambda 函数来运行我的代码。我正在使用猫鼬来处理与数据库的连接。

这是我放在一起来说明我的问题的示例代码:

query1() {
     return Collection.aggregate([...])
}
 
query2() {
  return Collection.aggregate([...])
}

query3() {
  return Collection.aggregate([...])
}

如果我使用Promise.all运行它需要相同的时间

Promise.all([ query1(), query2(), query3() ])

如果我运行它等待前一个完成

query1().then(result1 => query2().then(result3 => query3()))

虽然如果我在不同的 Lambda 执行中运行每个查询,完成每个单独的查询所需的时间会大大减少(1 到 2 秒之间)。

因此,如果它们并行运行,则执行应该在查询时间最长(2 秒)的时间内完成,而不是像现在这样花费 7 秒。

所以我的猜测是无论我如何发送查询,DocumentDB 的实例都会按顺序运行查询。在该集合中,大约有19,000个文档,总大小接近25Mb

当我检查实例的指标时,CPUUtilization仅略高于8%,可用RAM仅下降20Mb。所以我不认为延迟的问题与实例的大小有关。

你知道为什么 DocumentDB 会这样吗?是否可以更改配置以并行运行聚合?

标签: node.jsmongodbmongooseaws-lambdaaws-documentdb

解决方案


推荐阅读