Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当侦听器接收到许多事件时,Node.JS可以减少CPU负载_Javascript_Node.js_Postgresql_Asynchronous_Sequelize.js - Fatal编程技术网

Javascript 当侦听器接收到许多事件时,Node.JS可以减少CPU负载

Javascript 当侦听器接收到许多事件时,Node.JS可以减少CPU负载,javascript,node.js,postgresql,asynchronous,sequelize.js,Javascript,Node.js,Postgresql,Asynchronous,Sequelize.js,My Node.js应用程序有3个事件侦听器,每秒接收总共5-10k个事件。这些侦听器函数涉及向PostgreSQL数据库发送INSERT查询。比如说, foo.on('msg', data => sequelize.create(some_processing(data))); 在具有1个vCPU和1 GB RAM的云服务器上运行节点应用程序,服务器负载几乎总是100%。运行一段时间后,ORM会抱怨连接超时。我的猜测是,函数调用一直在排队,直到超过数据库查询的超时阈值 问题:侦听器函数

My Node.js应用程序有3个事件侦听器,每秒接收总共5-10k个事件。这些侦听器函数涉及向PostgreSQL数据库发送INSERT查询。比如说,

foo.on('msg', data => sequelize.create(some_processing(data)));
在具有1个vCPU和1 GB RAM的云服务器上运行节点应用程序,服务器负载几乎总是100%。运行一段时间后,ORM会抱怨连接超时。我的猜测是,函数调用一直在排队,直到超过数据库查询的超时阈值

问题:侦听器函数是否阻塞?如果是这样的话,它将通过使其成为一个异步的fire-and-foreget调用来帮助减少CPU负载,并且如何做到这一点

出于我的目的,可以无序插入数据,因为插入的每一行都有一个时间戳

在第一台服务器上运行node.js应用程序

  • 节点v12.14.0
  • Ubuntu 18.04
  • 1个vCPU、1 GB RAM、4 GB交换、SSD
在第二台服务器上运行PostgreSQL

  • PostgreSQL 11.5
  • Ubuntu 18.04服务器
  • 1个vCPU、1 GB RAM、4 GB交换、SSD

谢谢大家!

也许像DB层中的rabitmq这样的队列实现将解决您的问题problem@iambatmanPostgreSQL数据库托管在与node.js应用程序不同的服务器上,因此它当前的行为应该与node.js提交到RabbitMQ/Kafka之类的队列一样。对问题进行了编辑以使其更清楚。谢谢我很好奇,如果你替换了sequalize.js,直接使用例如,它会有什么表现,这会更快,但也会立即通过网络发送查询。