系统相关
首页 > 系统相关> > 在处理大量数据(十万级数据)时,有哪些方法可以提高性能和效率

在处理大量数据(十万级数据)时,有哪些方法可以提高性能和效率

作者:互联网

处理十万条数据时,以下几种方法可以帮助你提高性能和效率:

  1. 批量处理(Batch Processing)

    • 考虑将数据分成批次进行处理而不是单条更新。这样可以减少数据库的交互次数。
    • 例如,你可以每次处理1000条记录,并将它们合并为一个SQL语句,减少与数据库的交互。
  2. 使用事务

    • 将你的更新操作放在一个数据库事务中,这样可以提高效率并确保数据的一致性。事务能减少由于频繁提交可能导致的性能损失。
  3. 使用 Prepared Statement

    • 如果你的数据库支持预编译语句,使用预处理语句可以提高多次执行相同语句时的性能。
  4. 优化数据库

    • 保证数据库的索引合理设置,以加速查找过程。必要时对表进行优化和分析。
  5. 并行执行

    • 如果你的数据库能处理多个连接,可以在多线程或多进程中并行执行多个批处理。

以下是一个示例,实现了批量更新和事务处理:

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条记录,几乎所有的数据库操作都是异步执行的。这样可以显著提高处理十万条记录的效率。

标签:
来源: