Node.js WEB-сервер - голодание с использованием пакета mssql - PullRequest
0 голосов
/ 26 марта 2019

У меня есть веб-сервер, который принимает файлы 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();
            });


        });
    });
}

Может ли кто-нибудь помочь мне достичь этого?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...