问题描述
我正在 AWS 中使用 DocumentDB,当我尝试从不同的聚合查询同时读取同一个集合时遇到了问题。
问题不是我无法从数据库中读取,而是完成查询需要花费大量时间。我是同时触发查询还是一个接一个触发查询都没有关系。
我正在使用带有 NodeJS 的 Lambda 函数来运行我的代码。我正在使用 mongoose 来处理与数据库的连接。
这是我放在一起来说明我的问题的示例代码:
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 会这样吗?是否可以更改配置以并行运行聚合?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)