Node.js 中的并行 SQLite 查询

Parallel SQLite queries in Node.js

由于 SQLite3 包,

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

无论您将查询逻辑包装在 async.each/async.parallel 中,还是 parallelising/serialising 数据库 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);
}