У меня есть веб-сервер, который принимает файлы XML и сохраняет их в базе данных SQL Server.
Я использую промежуточное программное обеспечение для получения файлов и пакет MSSQL для сохранения содержимого XML в базу данных.
Я хочу, чтобы каждый пользователь мог отправлять несколько файлов одновременно (много одновременно, например 1000 или более).
Проблема в том, что когда пользователь отправляет файлы, он объединяет все пулы, указанные в конфигурации mssql, и, если другой пользователь отправляет больше файлов, ему придется ждать, пока первый пользователь закончит отправку всех файлов.
Я надеялся разделить пулы между всеми пользователями, отправляющими файлы, чтобы избежать голодания, чтобы они могли отправлять файлы одновременно.
Мой конфиг mssql выглядит так:
{
"user": "username",
"password": "xxxxxx",
"database": "database_name",
"server": "host.host",
"dialect": "mssql",
"encrypt": true,
"dialectOptions": {
"encrypt": true
},
"pool": {
"max": 5,
"min": 0,
"idle": 10000,
"acquire": 40000,
}
}
Мой файл подключения mssql:
const mssql = require('mssql');
const pool = new mssql.ConnectionPool(require('config'));
pool.connect(err => {if (err) throw err});
module.exports = pool;
Файл моего контроллера:
const fs = require('fs');
const async = require('async');
const mssql = require('@mssql');
exports.recive_xml_files = async (req, res) => {
const files = req.files;
const empresa = req.body.empresa;
let cnpj = empresa.split(':')[1];
async.each(files, (file, callback) => {
saveXmlDb(file, cnpj).then(() => {
callback();
});
}, (err) => {
let status = 200;
if (err) status = 500;
res.sendStatus(status);
});
};
const saveXmlDb = (file, cnpj) => {
return new Promise((resolve, reject) => {
fs.readFile(file.path, (err, data) => {
if (err) reject("Não foi possível ler o arquivo XML.");
let sXml = data.toString();
mssql.query(`INSERT into Arquivos_XML (Conteudo, Origem_Id) VALUES ('${sXml}', 6)`).then(res => {
console.log('SAAVING FOR THE FOLLOWING CNPJ------------>', cnpj);
resolve();
}).catch(err => {
reject();
});
});
});
}
Может ли кто-нибудь помочь мне достичь этого?
Спасибо.