2016-02-14 65 views
0

我有一个REST服务可能必须从数据库返回超过1000,000行。我正在通过打开输出流来完成它。基本上,我从HTTP-RESPONSE获取printwriter,并在从数据库获取数据时将其流回,而不是将所有内容存储在内存中,然后返回。传回HTTP响应的最佳方法?

某事像这样: -

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

我的问题是我们通过在水桶冲洗得到任何性能提升?就像在一个stringbuffer中存储5000行然后冲掉它而不是每行冲洗一样。

回答

0

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

我会建议在这里删除刷新,使BufferedOutputStream具有合理的小(512-8192字节)并在其上创建PrintWriter并使用不同的缓冲区大小执行测量。

相关问题