javascript - Mongoose 连接到 MongoDB Atlas 的最佳池大小是多少?

我的 Express REST API 正在使用 Mongoose 和 MongoDB Atlas。 Atlas 正在运行 M10s(EC2 T2 smalls),我的 REST API 在 EC2 M5 Large 上。我目前使用 mongoose 连接选项“poolSize”作为默认值 5(所以我认为副本集总共有 15 个打开的连接)。

我希望我的应用程序能够每秒处理 1000 个对 Atlas DB 的请求。

数据库只是 50K 用户的基本集合,每个用户都有几个数据点以及 10kb 的个人资料图片。 500 个请求将针对个人资料图像,另一半针对用户名和密码验证等内容。

我的 MongoDB Atlas 副本集说它最多有 350 个连接。如果我只使用其中的 15 个,我是否会无意中造成瓶颈?这 15 个连接(5 个/Node )是否能够每秒处理 1000 个请求?我是否应该将 Mongoose 中的“poolSize”增加到 100(到副本集的总连接数为 300)以便每秒允许更多请求?我意识到简单的答案是说去测试一下,但首先我想大致了解一下在这种情况下我应该做什么,并知道我当前设置的“poolSize”为 5 是否适用于 1000 个请求/秒?

最佳答案

我认为这里的链接应该对您有所帮助:https://dzone.com/articles/how-to-use-mongodb-connection-pooling-on-aws-lambd

来自那里的一大块有用的信息:

The connection pool size determines the maximum number of parallel requests that your driver can handle at a given time. If the connection pool limit is reached, any new requests will be made to wait until the existing ones are completed. Hence, the pool size needs to be chosen carefully, considering the application load and concurrency to be achieved.

通常,较小的池大小会导致您的大量请求等待连接,并可能导致高负载超时。

继续使用 JMeter 或其他设置为对您的应用执行并发请求的工具,并查看使用默认 5 poolSize 时您每秒获得的请求类型。

确保配置 JMeter(或其他工具),使其具有真实数量的并发用户和真实请求,尽可能反射(reflect)您将在生产中看到的内容。并设置了低负荷、中负荷和高负荷几种情况。

一旦您的基线具有默认设置,现在您可以增加池并查看 RPS 如何响应。

另外:注意大型池的内存消耗,每个连接会消耗约 1 兆字节。

这种经验分析通常是您如何适应您的设置。

https://stackoverflow.com/questions/51448064/

相关文章:

mongodb - 可以在 MongoDB 查询中使用严格的 JSON $dates 吗?

spring - 使用 Spring 数据 MongoDB @Document 创建一个上限集合

javascript - 在 MongoDB 中按字母顺序对文档进行排序(也称为自然排序顺序,人类排

mongodb - Spark 流 : foreachRDD update my mongo RDD

ruby-on-rails - MongoDB 的最佳分析/数据可视化库

mongodb - 如何在 $lookup Mongodb 的 LocalField 中将字符串转换

mongodb - 在集合之间移动文档是表示 MongoDB 中状态变化的好方法吗?

mongodb - Azure:不支持 DocumentDB Mongo $group

mongodb - 在mongo聚合中将ObjectID转换为字符串

regex - Mongo 正则表达式搜索的索引范围