【问题标题】:How to send Huge data sets to Client from Server如何从服务器向客户端发送大量数据集
【发布时间】:2021-02-12 19:06:58
【问题描述】:

我需要将数据从服务器(Tomcat:Java 进程、Odata API)发送到客户端(基于 React)

数据的范围从几 KB 到数百 MB(例如 700 MB),从 DB 中检索:RedShift,经过处理并发送到客户端。

也可以有多个客户端同时访问,以增加系统压力。

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

处理所有数据会消耗大量内存,应用程序的堆有时会耗尽,增加堆不是预期的解决方案,我想从应用程序端知道可以做些什么来优化系统资源。

请建议什么是传输数据的最佳方式,还想看看是否有任何其他类型的 API(Streaming) 可以帮助我

【问题讨论】:

    标签: java database performance rest odata


    【解决方案1】:

    你能改变客户端和你的系统之间的集成吗?

    类似于:客户端发送导出 CSV 的请求,其中包含有效负载中的回调 url。 您将此请求放入队列(rabbitmq)中。队列消费者处理请求,生成 CSV 并将其放在临时区域(S3 或 NGINX 后面)。然后你的消费者在回调 url 中通知客户端,然后新的 url 让客户端下载完整的 CSV。

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

    【讨论】:

    • 目前我无法更改客户端和服务器之间的集成,我正在寻找从服务器实现多部分下载,这样我们就不需要太多堆
    • 你在使用 Olingo 的 odata api 吗?我认为您可以使用迭代器+结果集和获取大小来不加载需要在堆中发送的所有数据。
    猜你喜欢
    • 2014-09-07
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多