流式传输回 HTTP-Response 的最佳方式



我有一个 REST 服务,它可能必须从数据库中返回超过 1000,000 行。我是通过打开输出流来做到这一点的。基本上,我从HTTP-RESPONSE获取打印机,并在从数据库中获取它时将其流式传输回,而不是将所有内容存储在内存中然后返回。

像这样:-

 @Override
      public void processRow(ResultSet resultSet) throws SQLException {
         String data = resultSet.getString("data");
            printWriter.write(data);
            printWriter.flush();
         }
      }

我的问题是,我们是否可以通过在桶中冲洗来获得任何性能提升?类似于在字符串缓冲区中存储 5000 行,然后将其刷新而不是每行刷新。

每次刷新将使系统通过所有缓冲区将数据"刷新"到网络层,或者,这取决于您使用的库,甚至可能阻塞,直到远程端确认数据已到达。这意味着它将花费大量时间在I/O阻塞上,也就是"它会非常慢"。

我建议在这里删除刷新,创建一个相当小(512-8192字节(的BufferedOutputStream,并在其上创建PrintWriter并使用不同的缓冲区大小执行测量。

相关内容

  • 没有找到相关文章

最新更新