Node.js 中的并行 SQLite 查询

Parallel SQLite queries in Node.js

本文关键字:SQLite 查询 并行 js Node      更新时间:2023-09-26
Node

.js 由于 SQLite3 包,对 SQLite 有一些非常好的绑定,但不幸的是,由于 Node 运行单线程,所有查询都在同一连接中完成。SQLite 按连接串联运行所有查询,这意味着在 Node 下的 SQLite 中不可能实际执行并行查询。有关更多详细信息,请查看此 https://github.com/mapbox/node-sqlite3/issues/394

无论您将查询逻辑包装在 async.each/async.parallel 中,还是用于并行化/序列化数据库 IO 的任何其他帮助程序包中,都是如此。归根结底,要从SQLite3下的Node异步IO架构中受益,您将需要多个处理线程。

怎么能做到这一点?:)

您可以使用集群 api 创建子进程,在这些子进程内,您可以运行不同的操作,在您的情况下是数据库查询。 https://nodejs.org/api/cluster.html。

注意:要创建的集群数量取决于您的硬件。

const cluster = require('cluster');
const db = new sqlite3.Database(':memory:')
if (cluster.isMaster) {
    console.log(`Master ${process.pid} is running`);
    cluster.fork()
        .on('exit', (worker, code, signal) => {
            console.log(`worker ${worker.process.pid} died`);
        });
    cluster.fork()
        .on('exit', (worker, code, signal) => {
            console.log(`worker ${worker.process.pid} died`);
        });
} else if (cluster.worker.id === 1){
  db.run(QUERY1);
} else {
 db.run(QUERY2);
}