java—如何处理大型http json响应体

iibxawm4  于 2021-07-22  发布在  Java
关注(0)|答案(1)|浏览(1520)

这个问题在这里已经有答案了

处理巨大HTTPJSON响应的最佳方法(2个答案)
上个月关门了。
rest api返回大量json数据示例结果:

{
   "arrayA":[
      {
         "data1":"data",
         "data2":"data"
      },..
   ],
   "arrayB":[
      {
         "data1":"data"
      },..
   ]
}

“arraya”可能只有0到100条记录,但“arrayb”可能有100万到1000万条记录,这使得我的java应用程序内存不足。我的问题是如何处理这个案子。

xtfmy6hx

xtfmy6hx1#

这里有不同的关注点,imo的问题太广泛了,因为最佳解决方案可能取决于实际用例。
你说,你有一个restapi,你想“保护”服务器从内存不足的错误,我明白。
但是,假设您找到了修复服务器上oom错误的方法,什么样的客户机希望一次查看数千万个对象?如果是浏览器,真的需要吗?在客户端处理json需要多长时间?应用程序的客户端不会变得太慢,客户端会开始抱怨吗?我相信你说得对。
所以第一种方法是“重新思考”为什么你需要这么大的回应。在这种情况下,最好的解决方案可能是重构和更改客户机-服务器通信的逻辑
现在,另一种可能的情况是您有一个“集成”——某种服务器到服务器的通信。
在这种情况下,一次添加整个json响应甚至流式处理都没有意义。例如,如果您在云中运行,您可能希望将这个巨大的json字符串添加到某个文件中,然后上传到s3,然后提供指向它的链接(因为s3可以处理这样的文件)。当然,在非aws环境中还有其他选择。
作为一个“精简”的想法,您可能会得到请求,在文件系统上创建临时文件,将数据分块写入其中,然后将“fileresource”返回给客户机。逐块工作将确保java应用程序的内存消耗较低。基本上,它相当于下载动态生成的文件。关闭流时,可能需要删除该文件。
如果您有某种“get heap dump”或一般功能中的任何数据转储,这将是最有效的。

相关问题