繁体   English   中英

Node.js中的并行SQLite查询

[英]Parallel SQLite queries in Node.js

由于使用了SQLite3软件包,Node.js具有一些非常好的SQLite绑定,但是不幸的是,由于Node运行单线程,因此所有查询都在同一连接中完成。 SQLite为每个连接串联运行所有查询,这意味着实际上不可能在SQLite的Node下进行并行查询。 有关更多详细信息,请检查此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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM