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

标签 node.js mongodb amazon-web-services aws-lambda

我希望使用连接到 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 连接池。

关于node.js - 来自 AWS Lambda 的 MongoDB 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728414/

相关文章:

mongodb - 如何在一个 MongoDB 查询中实现 "Insert or Increment"?

hadoop - 如何在 Amazon EC2 上停止启动 Juju 实例

node.js - Mongoose:获取最新记录,然后按另一个字段对它们进行排序

node.js - 如何在 node.js 中将文件定义为模块

javascript - 使用集合过滤事件

angularjs - 如何更新mongodb中的数组元素

java - Hibernate 5.2.10 DDL 自动更新到 AWS RDS (MySql 5.6.10a) 创建 TINYBLOB for Instant

amazon-web-services - AWS Lambda 热启动和冷启动

jquery ajax获取node express,如何获取json数据?

javascript - 如何避免使用 Express 在 Node.js 中重新发送刷新数据