![](/img/trans.png)
[英]RethinkDB and Node.js/Express - Opening multiple connections for parallel queries?
[英]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.