在 node.js 中将数据库工作转移到子进程是个好主意吗?
Is moving database works to child processes a good idea in node.js?
我刚开始接触 child_process
,我所知道的是它非常适合将阻塞函数(例如,循环一个巨大的数组)委托给子进程。
我使用 typeorm 与 mysql 数据库通信。我想知道将一些异步数据库工作转移到子进程是否有好处。我在另一个线程中读到(不幸的是我在浏览器历史记录中找不到它)没有充分的理由将异步函数委托给子进程。是真的吗?
示例代码:
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 的最大收获是它的异步性质...
当您调用异步函数时发生的事情是代码继续执行,而不是等待答案。就在函数完成并给出答案时,它会继续执行该部分。
您的数据库调用已经是异步的。所以你会产生另一个节点进程完全没有。由于您的数据库会吸收所有热量,因此拥有更多的 nodeJS 进程对这部分没有帮助。
举同样的例子,但有一个文件写入。什么可以使写入磁盘的速度更快?真的没什么……但我们在乎吗?不会,因为我们的 NodeJS 没有被阻塞,并且一直在响应请求和处理任务。您可能想要检查的唯一一件事是不要同时发送一千个文件写入,如果它们很大会对文件系统产生负面影响,但由于写入不是 CPU 密集, node 会 运行 就好了。
子进程确实是一个很棒的工具,但很少需要它。当我听说它们时,我也想使用一些,但问题是你肯定根本不需要它们......我唯一一次决定使用它是为了创建一个 CPU 密集型工人。它将确保它为每个核心生成一个子进程(因为节点是单线程的)并重新生成任何有故障的进程。
我刚开始接触 child_process
,我所知道的是它非常适合将阻塞函数(例如,循环一个巨大的数组)委托给子进程。
我使用 typeorm 与 mysql 数据库通信。我想知道将一些异步数据库工作转移到子进程是否有好处。我在另一个线程中读到(不幸的是我在浏览器历史记录中找不到它)没有充分的理由将异步函数委托给子进程。是真的吗?
示例代码:
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 的最大收获是它的异步性质...
当您调用异步函数时发生的事情是代码继续执行,而不是等待答案。就在函数完成并给出答案时,它会继续执行该部分。
您的数据库调用已经是异步的。所以你会产生另一个节点进程完全没有。由于您的数据库会吸收所有热量,因此拥有更多的 nodeJS 进程对这部分没有帮助。
举同样的例子,但有一个文件写入。什么可以使写入磁盘的速度更快?真的没什么……但我们在乎吗?不会,因为我们的 NodeJS 没有被阻塞,并且一直在响应请求和处理任务。您可能想要检查的唯一一件事是不要同时发送一千个文件写入,如果它们很大会对文件系统产生负面影响,但由于写入不是 CPU 密集, node 会 运行 就好了。
子进程确实是一个很棒的工具,但很少需要它。当我听说它们时,我也想使用一些,但问题是你肯定根本不需要它们......我唯一一次决定使用它是为了创建一个 CPU 密集型工人。它将确保它为每个核心生成一个子进程(因为节点是单线程的)并重新生成任何有故障的进程。