javascript - 在 Node.js 中将数据库工作移动到子进程是一个好主意吗?

标签 javascript node.js child-process

我刚刚开始了解child_process,我所知道的是,这对于将阻塞函数(例如循环一个巨大的数组)委托(delegate)给子进程很有好处。

我使用typeorm与mysql数据库进行通信。我想知道将一些异步数据库工作转移到子进程是否有好处。我在另一个线程中读到它(不幸的是我在浏览器历史记录中找不到它),没有充分的理由将异步函数委托(delegate)给子进程。这是真的吗?

示例代码:

child.js

import {createConnection} "./dbConnection";
import {SomeTable} from "./entity/SomeTable";

process.on('message', (m)=> {
    createConnection().then(async connection=>{
        let repository = connection.getRepository(SomeTable);
        let results = await repository
            .createQueryBuilder("t")
            .orderBy("t.postId", "DESC")
            .getMany();

        process.send(results);
    })
});

main.js

const cp = require('child_process');
const child = cp.fork('./child.js');
child.send('Please fetch some data');
child.on('message', (m)=>{
      console.log(m);
});

最佳答案

Javascript 的最大优点是它的异步特性......

当您调用异步函数时,代码会继续执行,而不是等待答案。当函数完成并给出答案后,它就会继续该部分。

您的数据库调用已经是异步的。因此,您将完全不需要产生另一个 Node 进程。由于您的数据库承担了所有的热量,因此拥有更多的 NodeJS 进程对此没有帮助。

采用相同的示例,但使用文件写入。什么可以使写入磁盘更快?确实没什么……但我们在乎吗?不会,因为我们的 NodeJS 没有被阻塞,并且会继续应答请求和处理任务。您可能想要检查的唯一一件事是不要同时发送一千个文件写入,如果它们很大,则会对文件系统产生负面影响,但由于写入不是 CPU 密集型,因此 Node 将只运行很好。

子进程确实是一个很棒的工具,但很少需要它。当我听说它们时,我也想使用它们,但问题是你肯定根本不需要它们......我决定使用它的唯一一次是创建一个 CPU 密集型工作线程。它将确保它为每个核心生成一个子进程(因为 Node 是单线程的)并重新生成任何错误的子进程。

关于javascript - 在 Node.js 中将数据库工作移动到子进程是一个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46610171/

相关文章:

javascript - 在 lodash 的属性上合并/加入 2 个数组对象

node.js - 将运行时参数传递给 Nodejs 子进程

javascript - JQuery 变量脚本

javascript - 获取请求查询字符串 Node

javascript - D3可以读取 "Geojson"文件吗?

node.js - 如果node.js中不存在,如何创建年->月->日期的文件夹层次结构

javascript - 如何使用 Node 创建一个子进程作为特定用户?

node.js - Node.js 中的链式 shell 命令

javascript - Javascript SQL INSERT 帮助

javascript - 我应该如何实现 Angular 选择指令?