AWS Lambda, MySQL и несколько вставок - PullRequest
0 голосов
/ 15 мая 2019

Я использую AWS Lambdas и MySQL в своем проекте.

Lambdas запускаются вызовами через API-шлюз.

Lambdas обычно получают некоторую информацию и записывают ее вбазу данных MySQL, или получите некоторые параметры и используйте их в запросе MySQL.

Большинство моих лямбд выглядят примерно так:

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);
			});
		}
	});
};

В общем, это, кажется, работает довольно хорошо.

В некоторых из моих Lambdas мне нужно выполнить более одного запроса;на данный момент я просто их вкладываю, что далеко не идеально.Если это станет более сложным, я переписываю использование цепочечных обещаний.

Моя текущая проблема заключается в следующем ... Мне нужна лямбда, которая может выполнить некоторое неизвестное (заранее) число вставок в базу данных.

(т. Е. Лямбда получит 1- n фрагментов данных и потребуется вставить каждый из них в базу данных).

( n обычно находится в диапазоне 1-100, но я бы хотел, чтобы это было достаточно устойчивым, чтобы обрабатывать больше - скажем, 1-1000).

Я, очевидно, не могу иметь вложенные запросы, так как я неНе знаю, сколько запросов мне понадобится заранее.

Если бы запросы были синхронными, я мог бы просто сделать их в цикле - это было бы хорошо и просто.

Если MySQLхранимые процедуры могут обрабатывать массив или список - у меня может быть только один запрос, который прошел весь список, и позволить SP обработать цикл.Но, если я не ошибаюсь, это невозможно.

Полагаю, было бы возможно, чтобы в запросе содержалось несколько операторов, т. Е. Просто строка вместе n вызовов SP в одном "запрос».Но это выглядит особенно не масштабируемым и не элегантным.

Итак, как лучше всего обрабатывать n (заранее неизвестно) запросов вставки в этом случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...