我从 AWS lands 函数中调用我的 AWS Rds 数据库。我成功地能够很好地调用数据库,但我正在尝试减少执行时间。我发现 95% 的时间都花在创建与 AWS RDS 代理端点的连接上。有没有办法加快这个速度?
下面的代码通常在 500-700 毫秒内运行。mysql.createConnection()
需要 400-600 毫秒才能完成。查询本身<50ms,JWT验证<20ms。
索引.js
'use strict';
const constants = require("./constants");
const OktaJwtVerifier = require('@okta/jwt-verifier');
const Database = require('./database');
const verifier = new OktaJwtVerifier({
'issuer': 'https://preview.okta.com/oauth2/default'
});
let db = new Database({
"host": process.env["rds_proxy_endpoint"],
"user": process.env["db_user"],
"database": process.env["database"],
"password": process.env["db_pass"]
});
let start;
let end;
exports.handler = async(event) => {
let response = {};
console.log("Starting JWT Validation");
start = new Date();
await verifier.verifyAccessToken(event.token, 'api://default').catch(err => {
console.log("Invalid Token");
response.statusCode = constants.HTTPSTATUS_UNAUTHORIZED;
response.body = err.userMessage;
});
end = new Date() - start;
console.log("JWT Verification Time: %dms", end);
let params = ["string"];
return await db.execute("CALL GetUsersGames(?)", params);
};
数据库.js
'use strict';
const mysql = require('mysql2/promise');
const constants = require('./constants');
let start;
let end;
module.exports = class Database {
constructor(config) {
this.config = config;
}
async execute(proc, params){
let response = {};
try {
console.log("Creating connection...");
start = new Date();
let connection = await mysql.createConnection(this.config);
end = new Date() - start;
console.log("Connection Execution Time: %dms", end);
start = new Date();
const rows = await connection.execute(proc, params);
end = new Date() - start;
console.log("Query Time: %dms", end);
//console.log(JSON.stringify(rows));
response["statusCode"] = constants.HTTP_OK;
response["body"] = JSON.stringify(rows[0][0]);
} catch(err){
console.log("ERROR: " + err);
response["statusCode"] = constants.HTTP_INTERNAL_SERVER_ERROR;
response["body"] = "Internal Server Error";
}
return response;
}
};