我正在使用第三方websocket连接。Websocket发送数组长度为100+的数据。所以我必须将每个记录都检查到数据库表中,以进行一些计算(必需(。
可能是在这个循环中,它导致内存和高CPU使用率。
我的数据库配置。
const sequelize = new Sequelize(DB_NAME, DB_USER, DB_PASSWORD, {
dialect: 'mysql',
host: DB_HOST,
port: DB_PORT,
logging: false,
dialectOptions: {
// useUTC: true
},
timezone: '+00:00',
pool: {
max: 500,
min: 0,
idle: 10000,
// @note https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057
acquire: 100*1000,
}
});
单循环代码:
for(const theOdd of records) {
await odd_records.count() // First query
await matches.findOne() //Second query
.
.
.
//End with 5-6 queries for each row.
}
如何进行优化?
有什么帮助吗?
假设每个记录要查询6次(假设有100条记录(。因此,您查询了600次。
我假设每个记录都有一个唯一的id。
- 在始终返回相同结果的循环外执行常数值查询
await odd_records.count()
在我看来是常量 - 收集所有记录的id,并在一个查询中获取每个记录的所有特定数据
- 此外,如果可能,请使用Promise.all进行查询
它将把查询数量减少到6个。