Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql AWS RDS减少Lambda的连接时间_Mysql_Node.js_Amazon Web Services_Amazon Rds Proxy - Fatal编程技术网

Mysql AWS RDS减少Lambda的连接时间

Mysql AWS RDS减少Lambda的连接时间,mysql,node.js,amazon-web-services,amazon-rds-proxy,Mysql,Node.js,Amazon Web Services,Amazon Rds Proxy,我正在从AWS lands函数中调用我的AWS Rds数据库。我成功地调用了数据库,但我正在努力减少执行时间。我发现95%的时间用于创建到AWS RDS代理端点的连接。有没有办法加快速度 下面的代码通常在500-700毫秒内运行mysql.createConnection()需要400-600毫秒才能完成。查询本身创建数据库连接是高I/O操作。这就是为什么在任何生产环境中,我们总是创建连接池。任何像JBoss等应用服务器都支持连接池作为JBoss功能本身。甚至hibernate也支持 在无服务器

我正在从AWS lands函数中调用我的AWS Rds数据库。我成功地调用了数据库,但我正在努力减少执行时间。我发现95%的时间用于创建到AWS RDS代理端点的连接。有没有办法加快速度


下面的代码通常在500-700毫秒内运行
mysql.createConnection()
需要400-600毫秒才能完成。查询本身创建数据库连接是高I/O操作。这就是为什么在任何生产环境中,我们总是创建连接池。任何像JBoss等应用服务器都支持连接池作为JBoss功能本身。甚至hibernate也支持


在无服务器场景中;你可以像Redis/Memcached一样创建连接并将其保存在内存中。我更喜欢redis。它们是通过ElastiCache作为服务提供的。

aws在lambda控制台中有一个名为aws rds proxy的sth。看看


不要在每次调用时创建新的数据库连接。重复使用以前调用的数据库连接。它们是否在同一个AZ/区域?@Deepak,它们都在us-west-2中
'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);
};
'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;
  }
};