在NodeJS服务器上处理大量数据检索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在NodeJS服务器上处理大量数据检索相关的知识,希望对你有一定的参考价值。

关于如何降低从我的NodeJS后端服务器上的数据库中获取和处理大量iot时间序列数据的延迟的一般性问题。有时即使我将超时设置为15秒,我也会超时。

我当前的设置使用Google Datastore作为流数据的数据库,NodeJS后端服务器用于在将数据传递到前端之前与数据存储进行交互。我还在后端服务器上本地托管的MongoDB作为缓存层。

1请求的数据检索工作流程大致如下:从mysql数据库查询设备mac地址并用于查询请求时间范围的缓存,然后从数据存储区检索时间间隔(未被缓存覆盖)的数据,以及聚合到请求的时间分辨率,并且如果需要,对某些类型的数据进行额外的解析。

我能想到的一些提高性能的策略包括。欢迎对以下策略提出任何其他建议/意见。

  1. 异步 - 使用异步从缓存中获取数据以及数据存储(已实现)
  2. 流 - 使用fs返回流中的数据以提高内存利用率
  3. 压缩 - 使用压缩等库来减少发送到前端的数据大小
  4. 群集 - 使用群集来利用多核处理器(更多用于服务多个请求,而不是为减少每个请求的延迟而相关)
  5. 增加服务器CPU / RAM - 为更强大的服务器提供服务(我如何知道要配置多少内存/处理器速度/内核数?)
答案

您希望专注于减少延迟,但是从我的角度来看,您使用的是太复杂的系统,涉及无法有效使用的技术。你说你的工作流程是这样的:

MySQL - > Cache(使用MongoDB)/ Datastore - > NodeJS - > FrontEnd

首先,看看您使用的是三种不同的数据库解决方案。我知道它们是用于不同的任务,但它似乎并不是最有效的方法。我会说Datastore + MongoDB的组合似乎也不自然。你为什么不使用以下其中一种?:

  1. Datastore + Redis的组合(用于缓存功能)。在这里,你有关于如何Cache Application Data Using Redis的官方文档。在这里你有一个更详细的教程如何Connect to Redis from Node.js on Google App Engine Flexible,做所有的交互,包括部署Redis on Google Cloud using Deploy Launcher
  2. 直接使用Mongodb。这里有关于如何使用Connect to MongoDB from Node.js on Google App Engine Flexible environment的教程。

无论你选择第一个还是第二个选项:你不能使用MySQL吗?

如果您使用Google App Engine使用任何这些解决方案,您将更容易回答有关群集和增加服务器CPU / RAM的问题。您可以尝试使用different configurations of your app.yaml来检查最适合您的内核和RAM的数量。

关于异步和压缩策略,我没有其他任何想法。根据Streams,您可以使用@MichałCzapracki关于使用scramjet的建议。

以上是关于在NodeJS服务器上处理大量数据检索的主要内容,如果未能解决你的问题,请参考以下文章

在NodeJS中使用带有大量数据的Datatable时搜索错误

nodejs - 为啥 Node.js 可以处理大量的同时持久连接?

如何处理来自 REST 服务的大量数据

流式处理 WCF 大量对象

直接在数据库上处理大量数据是个好主意吗?

Erlang Udp 服务器丢弃大量数据包