如何从服务器向客户端发送大量数据集

时间:2020-10-30 10:10:48

标签: java database performance rest odata

我有一个要求从服务器(Tomcat:Java进程,Odata API)向客户端(基于响应)发送数据

数据的范围从几KB到几百MB(说700 MB),可以从DB检索到:RedShift,已处理并发送给客户端。

也可以有多个客户端同时访问,以保持对系统的更多压力。

我们添加了分页功能,以便仅加载该页面的数据,但是我们具有导出CSV格式的完整数据集的功能。

处理所有数据会消耗大量内存,并且应用程序的堆有时会耗尽,增加堆不是解决方案,我想从应用程序方面知道可以做任何事情来优化系统资源。

请提出什么可能是最好的数据传输方式,谁也想看看是否还有其他API(流式传输)可以在这里为我提供帮助

1 个答案:

答案 0 :(得分:0)

您可以更改客户端与系统之间的集成吗?

类似的东西:客户端发送请求以导出带有有效负载中的回调URL的CSV。 您将此请求放入队列(rabbitmq)。队列使用者处理请求,生成CSV并将其放置在临时区域(S3或NGINX的后面)。然后,您的使用者在回调URL中通知客户端,然后在新URL中供客户端下载完整的CSV。

这样,处理传入请求的系统不会使用太多堆。您只需要扩展队列使用方,但这会更容易,因为并发是您配置使用多少条使用方的消息的配置,而不是来自客户端的传入请求。