我在项目上使用AWS Lambdas和MySQL。
Lambda由通过API网关的调用触发。
Lambda通常会接收一些信息,并将其写入MySQL数据库,或者接收一些参数,然后在MySQL查询中使用这些参数。
我的大多数Lambda看起来像这样:
var mysql = require('mysql');
var config = require('/opt/nodejs/config.json');
var pool = mysql.createPool({
connectionLimit: config.connectionLimit,
host: config.host,
user: config.user,
password: config.password,
database: config.database
});
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
let response = {
statusCode: 200
};
let body = {};
pool.getConnection(function(error, connection) {
if (error) {
body.errorMessage = "Error: pool.getConnection failed. error: " + error;
response.statusCode = 500;
response.body = JSON.stringify(body);
callback(null, response);
} else {
let query = "CALL [some stored proc]";
let params = [some parameters];
connection.query(query, params, function(error, results, fields) {
connection.release();
if (error) {
response.statusCode = 500;
body.errorMessage = "Error: connection.query failed. error: " + error;
} else {
body.results = results;
}
response.body = JSON.stringify(body);
callback(null, response);
});
}
});
};
通常,这似乎效果很好。
在我的一些Lambda中,我需要执行多个查询;目前,我只是嵌套它们,这并不理想。如果那变得越来越复杂,我将重写为使用链式诺言。
我当前的问题是...我需要一个Lambda,它可以执行一些(未知)数量的数据库插入。
(即Lambda将接收1- n 条数据,并且需要将每条数据插入数据库中。)
( n 通常在1到100的范围内,但是我希望它足够健壮以应付更多-例如1-1,000)。
由于我不知道事先需要多少个查询,因此我显然无法嵌套查询。
如果查询是同步的,我可以将它们循环循环-那样很好又容易。
如果MySQL存储过程可以处理数组或列表-我可以只有一个查询来传递整个列表,然后让SP处理循环。但是,除非我弄错了,否则那是不可能的。
我想查询中可能包含多个语句-即,只需在单个“查询”中将 n 个SP调用串在一起即可。但是,这似乎特别不可扩展且不雅致。
那么,在这种情况下处理 n (事先未知)插入查询的最佳方法是什么?