node.js - 来自 AWS Lambda 的 MongoDB 连接

我希望使用连接到 MongoDB 数据库的 AWS Lambda/API Gateway 创建一个 RESTful API。我已经阅读到与 MongoDB 的连接相对昂贵,因此最佳做法是在建立连接后保留连接以供重复使用,而不是为每个新查询建立新连接。

这对于普通应用程序来说非常简单,因为您可以在启动期间建立连接并在应用程序生命周期内重复使用它。但是,由于 Lambda 被设计为无状态,因此保留此连接似乎不太直接。

因此,我想知道解决此数据库连接问题的最佳方法是什么?每次调用 Lambda 函数时我是否都被迫建立新连接,或者有没有办法将这些连接池化/缓存以实现更高效的查询?

谢谢。

最佳答案

AWS Lambda 函数应该被定义为无状态函数,因此它们不能像连接池那样保持状态。

此问题也曾在此 AWS forum post 中提出. 2015 年 10 月 5 日,AWS 工程师 Sean 发布了您应该打开和关闭每个请求的连接,方法是在处理程序 block 之外在代码初始化时创建一个池。但两天后,同一位工程师发帖称你不应该这样做

问题在于您无法控制 Lambda 的运行时环境。正如 blog post by Tim Wagner 中所描述的,我们确实知道这些环境(或容器)会被重用。 .但是缺乏控制会驱使您耗尽所有资源,例如达到数据库中的连接限制。但这取决于你。

您可以使用 RESTHeart 而不是从您的 lambda 函数连接到 MongoDB通过 HTTP 访问数据库。与 MongoDB 的连接池由 RESTHeart 维护。请记住,在性能方面,您将在每个请求上打开一个到 RESTHeart 的新 HTTP 连接,而不是像在传统应用程序中那样使用 HTTP 连接池。

https://stackoverflow.com/questions/31728414/

相关文章:

node.js - Mongoose:CastError:在路径 "[object Object]"

mongodb - 截断集合

mongodb - 如何根据 Mongodb 中的键删除重复项?

node.js - 连续迭代 mongodb 游标(在移动到下一个文档之前等待回调)

mongodb - 有人用过 Aerospike 吗?它与 MongoDB 相比如何?

mongodb - 如何将 MongoDB 中的属性从文本类型转换为日期类型?

mongodb - 用于 mongodb ObjectId 创建时间

javascript - 如何从 Mongoose 的集合中排除一个特定字段?

javascript - 如何在nodejs mongodb native 驱动程序中将字符串转换为

python - pymongo.errors.CursorNotFound : cursor id