在循环TimeoutError内启动多个select查询时出错:ResourceRequest超时 我正在使用nodejsexpress框架 我将mysql数据库与sequelizejs库一起使用,并使用查询来检索数据

在循环TimeoutError内启动多个select查询时出错:ResourceRequest超时 我正在使用nodejsexpress框架 我将mysql数据库与sequelizejs库一起使用,并使用查询来检索数据,mysql,node.js,localhost,sequelize.js,Mysql,Node.js,Localhost,Sequelize.js,当我对近500000条记录启动select查询时,我遇到超时错误 我已完成服务器超时,但未工作。 我在Sequalizejs中使用了池方法,但没有成功 function fetchNamesData(req, name) { return new Promise((resolve, reject) => { const names = req.app.locals.models.names_data; names.findAll({

当我对近500000条记录启动select查询时,我遇到超时错误

我已完成服务器超时,但未工作。 我在Sequalizejs中使用了池方法,但没有成功

function fetchNamesData(req, name) {
    return new Promise((resolve, reject) => {
        const names = req.app.locals.models.names_data;
        names.findAll({
            where: {
                name: name
            },
            order: [['date', 'DESC']],
            limit: 50
        })
            .then(function (dbRes) {
                console.log(dbRes.length);
                resolve(dbRes);
            })
            .catch(function (dbErr) {
                console.log(dbErr);
                return reject(dbErr);
            });
    });
}

allNames.forEach(element => {
//console.log(element.dataValues.name);
fetchNamesData(req, element.dataValues.name).then((dbRes) => {
//here I will have all the records
}).catch((dbErr) => { console.log(dbErr) });
var allNames={拥有近7000个名称} 现在我迭代这个obj,每个名字在数据库中有50条记录
我想得到所有的记录,比如50*7000=3,50000。

你的情况是:

在mySql中循环7000个名称,同时命中7000个查询,mySql会创建队列,同时执行7000个查询,导致机器负载。您可以更新配置以处理此类负载,也可以

解决方案:尝试在每次查询时放置一些超时,这样您将能够获取更多记录

allNames.forEach(element => {
    setTimeout(() => { // <----------- HERE -------------
        fetchNamesData(req, element.dataValues.name).then((dbRes) => {
            //here I will have all the records
        }).catch((dbErr) => {
            console.log(dbErr)
        });
    },500); // <----------- HERE -------------
}); 
allNames.forEach(元素=>{
setTimeout(()=>{//{
//这里有所有的记录
}).catch((dbErr)=>{
console.log(dbErr)
});

},500);//我找到了类似
-删除不需要的console.log()和
-您的硬件配置也取决于超时错误。
-当触发查询时,不要启动或运行任何其他工作,这将导致超时错误[当有多个crud操作正在进行时]。

-当特定字段将在where子句中使用时,也为表字段提供索引。

感谢您回答Vivek,但我不想在检索数据时浪费任何时间。如果我没有计算错误,您的建议将花费我大约16天的时间……但我已经尝试过,但没有运气……我仍然收到了这个错误