2016-02-14 3 views
0

У меня есть служба REST, которая, возможно, должна вернуть более 1000 000 строк из базы данных. Я делаю это, открывая выходной поток. В основном, я получаю от автора HTTP-RESPONSE и передаю его обратно, поскольку получаю его из базы данных, а не сохраняю все в памяти, а затем возвращаюсь обратно.Лучший способ передачи HTTP-ответа?

STH, как это: -

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

Мой вопрос мы получим какой-либо выигрыш в производительности путем промывки в ведре? Что-то вроде хранения 5000 строк в stringbuffer, а затем вымывание, а не очистка его в строке.

ответ

0

Каждый флеш заставит систему «промывать» данные через все буферы вплоть до сетевого уровня или, в зависимости от используемых вами библиотек, может даже блокироваться до тех пор, пока удаленная сторона не подтвердит, что данные были получены. Это означает, что в блокировке ввода-вывода будет много времени, так как «это будет очень медленно».

Я бы рекомендовал удалить флеш здесь, создать BufferedOutputStream с достаточно маленькими (512-8192 байта) и создать над ним PrintWriter и выполнить измерения с разными размерами буфера.