2016-02-14 116 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並使用不同的緩衝區大小執行測量。

相關問題