2013-11-25 4 views
0

Я разрабатываю приложение для одного из наших клиентов с использованием Java 1.7 + GAE и используя Google cloud sql, а также базу данных.Попытка получить данные из большого набора данных

Я пытаюсь получить данные из огромного набора результатов, но единственное, что я получаю от страшного таймаута.

До сих пор, код я имею следующее:

public List <String> leerMasivo(String cadena, String [] valores) throws SQLException{ 
    log.info("Entra en la función leer(String cadena, String [] valores)"); 
    this.conectar(); 
    long nRowsNumber = 1; 
    long nId = 0; 
    List <String> listaDatos = new ArrayList <String>(); 
    try{ 
     while (nRowsNumber > 0) { 
      nRowsNumber = 0;  
    PreparedStatement stmt = con.prepareStatement(cadena, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
    stmt.setMaxRows(10); 

    System.out.println("Número de filas maximo "+stmt.getMaxRows());   
    if(valores != null){ 
     for(int i=0; i< valores.length;i++){ 
      stmt.setString(i+1,valores[i]); 
     } 
    } 
    ResultSet rs = stmt.executeQuery(); 
    ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData(); 
    int numeroColumnas= rsmd.getColumnCount(); 

    while (rs.next()){ 
     ++nRowsNumber; 
     nId = rs.getLong(1); 
     if (numeroColumnas >1){ 
      String fila =""; 
      for (int i=1;i<=numeroColumnas;i++){ 
        fila=fila + "::" + rs.getString(i); 
      } 
      fila=fila+"%%"; 
      listaDatos.add(fila); 
     }else{ 
      listaDatos.add(rs.getString(1)); 
      } 
     } 
    } 
    log.info("Los valores leidos son: " + listaDatos.toString()); 
    }catch(Exception e){ 
     log.info("Ha ocurrido un error"); 
     log.info("el error es " + e.getMessage().toString()); 
     con.close(); 
     e.printStackTrace(); 
    }finally{ 
     this.cerrarConexion(); 
    } 
    log.info("Sale de la función leer(String cadena, String [] valores)"); 

    return listaDatos; 

} 

Я требую, если у вас есть время, чтобы сказать мне, что осталось, так что я могу получить данные мне нужно без получения ошибки тайм-аута. Прямо сейчас я не знаю, чего я могу потерять.

Спасибо за ваше время,

Уважением,

+0

Пожалуйста, определите «огромный». –

+0

Более 8000 строк в результате выбора запроса с двумя объединениями, для меня, его огромными. – Catersa

ответ

1

У вас есть несколько вариантов здесь:

  • рассмотреть использование MapReduce library для работы на больших наборах данных
  • запустить эту задачу на module with manual or basic scaling так не будет временных ограничений
+0

Спасибо за комментарий, мушкетер, я отдам ответ. С уважением, – Catersa

Смежные вопросы