AWS Lambda,MySQL和多个插入

时间:2019-05-15 14:17:06

标签: mysql amazon-web-services aws-lambda

我在项目上使用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 (事先未知)插入查询的最佳方法是什么?

0 个答案:

没有答案