node.js - 聚合并发的 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 会这样吗?是否可以更改配置以并行运行聚合?
解决方案
推荐阅读
- php - 如何根据域使用动态 URL / 路由?
- azure-devops - 无法在托管代理上的 azure 管道任务中连接到 localdb
- javascript - 递归 setTimeout 调用是否会导致闭包链内存泄漏?
- c# - 当我尝试从中删除一行时,为什么我的文本文件不保存它的更改?
- docker - 如何让 docker 容器登录主机
- django - Django 管理员,多对多,保存到数据库和从数据库中检索
- angular - 带有服务器端分页的垫表 - Angular
- r - 如何在R中检查条件后向控制台发送消息但不返回NULL而不是返回
- javascript - 访问链中先前 Promise 的数据
- tfs - 当我在 TFS 板中移动工作项时,分配给我的工作项