1
1
mirror of https://github.com/Fabio286/antares.git synced 2025-02-18 12:40:41 +01:00

perf(MySQL): improved connections pool handling

This commit is contained in:
Fabio Di Stasio 2021-05-15 21:47:30 +02:00
parent 854472c7a3
commit 434711a360
3 changed files with 72 additions and 71 deletions

View File

@ -83,8 +83,8 @@ This is a roadmap with major features will come in near future.
#### • ARM
- [ ] Windows
- [ ] Linux
- [ ] MacOS
- [x] Linux
- [x] MacOS
## Translations

View File

@ -1,5 +1,5 @@
'use strict';
import mysql from 'mysql2';
import mysql from 'mysql2/promise';
import { AntaresCore } from '../AntaresCore';
import dataTypes from 'common/data-types/mysql';
@ -102,8 +102,10 @@ export class MySQLClient extends AntaresCore {
* @memberof MySQLClient
*/
async connect () {
delete this._params.application_name;
if (!this._poolSize)
this._connection = mysql.createConnection(this._params);
this._connection = await mysql.createConnection(this._params);
else {
this._connection = mysql.createPool({
...this._params,
@ -1273,6 +1275,8 @@ export class MySQLClient extends AntaresCore {
* @memberof MySQLClient
*/
async raw (sql, args) {
if (process.env.NODE_ENV === 'development') this._logger(sql);// TODO: replace BLOB content with a placeholder
args = {
nest: false,
details: false,
@ -1280,15 +1284,15 @@ export class MySQLClient extends AntaresCore {
...args
};
if (args.schema && args.schema !== 'public')
await this.use(args.schema);
const nestTables = args.nest ? '.' : false;
const resultsArr = [];
let paramsArr = [];
const queries = args.split ? sql.split(/((?:[^;'"]*(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*')[^;'"]*)+)|;/gm) : [sql];
const isPool = typeof this._connection.getConnection === 'function';
const connection = isPool ? await this._connection.getConnection() : this._connection;
if (process.env.NODE_ENV === 'development') this._logger(sql);// TODO: replace BLOB content with a placeholder
if (args.schema)
await connection.query(`USE \`${args.schema}\``);
for (const query of queries) {
if (!query) continue;
@ -1297,13 +1301,10 @@ export class MySQLClient extends AntaresCore {
let keysArr = [];
const { rows, report, fields, keys, duration } = await new Promise((resolve, reject) => {
this._connection.query({ sql: query, nestTables }, async (err, response, fields) => {
connection.query({ sql: query, nestTables }).then(async ([response, fields]) => {
timeStop = new Date();
const queryResult = response;
if (err)
reject(err);
else {
let remappedFields = fields
? fields.map(field => {
if (!field || Array.isArray(field))
@ -1371,13 +1372,14 @@ export class MySQLClient extends AntaresCore {
fields: remappedFields,
keys: keysArr
});
}
});
}).catch(reject);
});
resultsArr.push({ rows, report, fields, keys, duration });
}
if (isPool) connection.release();
return resultsArr.length === 1 ? resultsArr[0] : resultsArr;
}
}

View File

@ -368,7 +368,6 @@ export default {
},
setNull () {
const row = this.localResults.find(row => this.selectedRows.includes(row._id));
delete row._id;
const params = {
primary: this.primaryField.name,