Я использую 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 (заранее неизвестно) запросов вставки в этом случае?