【问题标题】:How to handle huge data from a REST service如何处理来自 REST 服务的大量数据
【发布时间】:2014-03-03 18:09:35
【问题描述】:

我们正在使用返回大量数据的 REST 服务。 在生产中,服务器硬件可以处理它。 我需要通过在本地机器上获取数据来测试 REST 服务, 它无法处理大量数据。 我的本地机器是 4G i5。 每次我点击服务时,我都会出现内存不足的异常。

response.getStatus() 返回 200 状态。 但是在使用输入流阅读器收集数据时,我遇到了内存不足的异常。

BufferedReader br = new BufferedReader(new
InputStreamReader(newByteArrayInputStream(response.getEntity().getBytes())));

有没有其他方法来收集数据而不会遇到内存异常?

我尝试将我的 VM 大小推到 2G,但它仍然不起作用。

【问题讨论】:

  • 只返回部分响应怎么样?
  • 写入磁盘或/dev/null
  • @Petey 我需要字节数组来写入文件,但是在获取字节时它失败了 'response.getEntity().getBytes()'
  • @LutzHorn,您的意思是更改 Web 服务以部分返回,或者在接收响应时我们可以将其拆分为部分?
  • 考虑向您的 REST 服务添加“测试模式”,将响应数据写入文件或仅返回一小部分数据。

标签: java web-services rest restful-url restful-architecture


【解决方案1】:

如果服务支持,在整个响应内容负载范围内使用requesting chunks的HTTP标准方法。

另一种方法(同样,假设 API 支持它)是pagination

【讨论】:

  • 这是我可以推荐的好方法。谢谢布赖恩!!
【解决方案2】:

您可以在 REST 服务配置中实施阈值设置,以限制返回的数据量。 在生产中,阈值要么不设置,要么设置为较大的值。 在您的测试环境中,您可以将阈值设置为一个小的、可管理的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多