javascript - Node.js 中的并行 SQLite 查询

标签 javascript node.js multithreading sqlite

得益于 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/

相关文章:

javascript - 在 NodeJs 简单模拟中捕获查询字符串中的参数

java - java中继承下的同步静态方法行为

javascript - 如果点击链接出现404错误,如何重定向网页?

javascript - 在 Javascript 中进行浏览器检测的最佳方法是什么?

javascript - Codewars 问题 'Happy numbers' 我怎样才能对我的代码进行一些更改以使其工作?

node.js - 云函数: Promises must be handled appropriately

javascript - 使用nodejs在dynamodb中的列表中搜索

javascript - MongoDB 数组在 Javascript 中未定义,但存在于数据库中

c++ - SQLite:以 WAL 模式保留文件句柄

c - C、Linux中不同进程线程的同步