点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我正在使用SAP Cloud Functions。 我的用例非常简单-用户调用该函数,该函数使用连接字符串连接到MongoDB Atlas(不支持SAP CP Mongo服务,因为尚不支持该功能),执行CRUD操作并返回结果。
我已经如下定义了我的云函数-index.js-
const mongoose = require('mongoose'); constAddress = require('./models/Address') module.exports = asyncfunction(事件,上下文) { const mongoConfig = context.getSecretValueJSON('mongodb','config.json'); 尝试{ 等待mongoose.connect(mongoConfig.config.uri, {useNewUrlParser:true,useCreateIndex:true}); console.log("已连接到数据库") let address = new Address({" city":" Berlin"}) 等待地址.save() console.log("成功保存地址信息") 退货地址; }捕获(错误){ console.log("错误-" +错误) 返回错误} };
相应的模式和模型在另一个文件-Address.js中定义
const mongoose = require(" mongoose"); const addressSchema = new mongoose.Schema({ 城市:{ 类型:字符串, 必填:是, 修剪:真 } },{strict:false}); const Address = mongoose.model('Address',addressSchema); module.exports =地址
现在的问题是,每次调用该函数时,猫鼬都会打开与数据库的新连接,在我看来这是一种非常低效的处理方式。 我想知道的是,如何组织代码以使连接仅发生一次(最好是在功能的初始部署期间)。
我尝试的是-在另一个名为connection.js的文件中定义连接详细信息-
const mongoose = require('mongoose'); mongoose.connect('mongodb:..........',{ useNewUrlParser:true, useCreateIndex:true});
但是现在的问题是,我必须将连接详细信息硬编码在文件connection.js中。 在第一个代码段中,您将看到我使用了一个名为-
的属性。mongoConfig.config.uri
此属性仅在函数内部通过变量 context
可用,该变量传递给cloud函数。 此变量从我们在部署期间定义的环境变量中选择连接详细信息。
我想利用环境变量而不是硬编码任何敏感信息。 同时确保连接- mongoose.connect()
仅被调用一次,而不是每次调用该函数时都被调用。
所以,我有2个选项-
1。 访问main函数外部的context变量(在require语句之后),然后调用mongoose.connect(在main函数外部),从而对所有传入的函数调用重新使用mongoose连接。 或
2。 继续当前的实现,并将mongoose.connect放置在main函数中。 我现在可以使用上下文变量访问环境变量,但是将为每个新函数调用创建猫鼬连接。
谢谢
你好Boudhayan,
很好的问题! 我对此没有确切的答案,我会说这是更多意见。
FaaS背后的业务模型是,只有在执行函数时才需要付费。 这意味着,您的功能在某些时间间隔内可能根本不处于"活动"状态。 提供程序只会在您尝试访问它时"启动"您的功能。 例如。 由于可能会终止该功能,因此无法在多个请求之间保持连接打开。
如果您需要如此频繁地调用此函数,那么创建连接的开销将非常昂贵。 首先,您是否需要考虑FaaS。
您好, Boudhayan Dev ,
好。 我不确定FaaS如何作为afaik在后台运行,没有选择进入"更深层次"并且抽象程度降低的选项。 但这很有趣。
一周热门 更多>