得益于 SQLite3 包,Node.js 对 SQLite 有一些非常好的绑定(bind),但不幸的是,由于 Node 运行单线程,所有查询都在同一个连接中完成。 SQLite 串行运行每个连接的所有查询,这意味着在 Node.js 下的 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);
}
关于javascript - Node.js 中的并行 SQLite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28034781/