在NodeJS服务器上处理大量数据检索
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在NodeJS服务器上处理大量数据检索相关的知识,希望对你有一定的参考价值。
关于如何降低从我的NodeJS后端服务器上的数据库中获取和处理大量iot时间序列数据的延迟的一般性问题。有时即使我将超时设置为15秒,我也会超时。
我当前的设置使用Google Datastore作为流数据的数据库,NodeJS后端服务器用于在将数据传递到前端之前与数据存储进行交互。我还在后端服务器上本地托管的MongoDB作为缓存层。
1请求的数据检索工作流程大致如下:从mysql数据库查询设备mac地址并用于查询请求时间范围的缓存,然后从数据存储区检索时间间隔(未被缓存覆盖)的数据,以及聚合到请求的时间分辨率,并且如果需要,对某些类型的数据进行额外的解析。
我能想到的一些提高性能的策略包括。欢迎对以下策略提出任何其他建议/意见。
- 异步 - 使用异步从缓存中获取数据以及数据存储(已实现)
- 流 - 使用fs返回流中的数据以提高内存利用率
- 压缩 - 使用压缩等库来减少发送到前端的数据大小
- 群集 - 使用群集来利用多核处理器(更多用于服务多个请求,而不是为减少每个请求的延迟而相关)
- 增加服务器CPU / RAM - 为更强大的服务器提供服务(我如何知道要配置多少内存/处理器速度/内核数?)
您希望专注于减少延迟,但是从我的角度来看,您使用的是太复杂的系统,涉及无法有效使用的技术。你说你的工作流程是这样的:
MySQL - > Cache(使用MongoDB)/ Datastore - > NodeJS - > FrontEnd
首先,看看您使用的是三种不同的数据库解决方案。我知道它们是用于不同的任务,但它似乎并不是最有效的方法。我会说Datastore + MongoDB的组合似乎也不自然。你为什么不使用以下其中一种?:
- 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
- 直接使用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时搜索错误