在处理大量数据(十万级数据)时,有哪些方法可以提高性能和效率
作者:互联网
处理十万条数据时,以下几种方法可以帮助你提高性能和效率:
-
批量处理(Batch Processing):
- 考虑将数据分成批次进行处理而不是单条更新。这样可以减少数据库的交互次数。
- 例如,你可以每次处理1000条记录,并将它们合并为一个SQL语句,减少与数据库的交互。
-
使用事务:
- 将你的更新操作放在一个数据库事务中,这样可以提高效率并确保数据的一致性。事务能减少由于频繁提交可能导致的性能损失。
-
使用 Prepared Statement:
- 如果你的数据库支持预编译语句,使用预处理语句可以提高多次执行相同语句时的性能。
-
优化数据库:
- 保证数据库的索引合理设置,以加速查找过程。必要时对表进行优化和分析。
-
并行执行:
- 如果你的数据库能处理多个连接,可以在多线程或多进程中并行执行多个批处理。
以下是一个示例,实现了批量更新和事务处理:
const BATCH_SIZE = 1000; // 每批处理的条目数
let allPromises = [];
(async () => {
for (let i = 0; i < shops.length; i++) {
let token = "qp_" + shops[i]['shopid'];
const tableName = "items" + shops[i]['shopid'];
const datas = await new Promise((resolve) => {
rds_db.findData(token, function (datas) {
resolve(datas ? JSON.parse(datas) : []);
});
});
if (datas.length === 0) continue;
// 分批处理数据
for (let j = 0; j < datas.length; j += BATCH_SIZE) {
const batch = datas.slice(j, j + BATCH_SIZE);
const insertSql = batch.map(item => `
UPDATE zydj.${tableName} SET
qty='${item["item_qty"]}',
price='${item["item_price"]}',
original_price='${item["old_price"]}',
vip_price='${item["vip_price"]}',
uptime='${currentDateTime}'
WHERE code = '${item["item_code"]}';`
).join(' ');
allPromises.push(mysql_db.runSQLByAsync(insertSql));
}
}
// 等待所有批处理完成
await Promise.all(allPromises);
// 最后写入文件
const data = currentDateTime + "写入";
fs.writeFile(filePath, data, 'utf8', (err) => {
if (err) throw err;
console.log('文件已成功写入');
});
process.exit();
})();
JavaScript
这个示例中,我们将数据分成批次进行更新,每次更新1000条记录,几乎所有的数据库操作都是异步执行的。这样可以显著提高处理十万条记录的效率。
标签: 来源: