Java - Como mejorar el proceso de java

   
Vista:

Como mejorar el proceso de java

Publicado por principiante (13 intervenciones) el 28/10/2009 17:49:48
Hola a todos, espero su valiosa ayuda, necesito procesar al rededor de 38,000,000 de registros consultando una tabla de casi 180,000,000 en esta última se encuentra un campo en donde puedo obtener el sexo y la edad, el problema es que el procedimiento que desarrolle tarda casi en 4 días procesar 1'400,000.. alguna sugerencia para mejorar el rendimiento ya que por más que le he tratado de mejorar no he podido, les dejo el código que realiza la actualización.

public void actualizarDatosGenerales(String path){
/*Obtenemos los registros para asignarles sexo y edad
*/
String strNss = "";
String CURP="";
int Edad_NSS = 0;
int Edad_CURP = 0;
String FechaNss="";
String Sexo = "";
long conta = 0;
long TieneCurp =0;
long contReg =0;
PrintWriter pw = null;
FileWriter fichero = null;
utileriasComunes uc = new utileriasComunes();
DataBaseConnections dc = new DataBaseConnections();
DataBaseConnections dcselec = new DataBaseConnections();
ProcesaRegistrosConsar prc = new ProcesaRegistrosConsar();
dc.DataBaseSQLSERVER("CONSAR", "IMSS-EAA0F10023");
dcselec.DataBaseSQLSERVER("CONSAR", "IMSS-EAA0F10023");
dc.openConnections();
dcselec.openConnectionsReadOnly();

//Obtenemos la fecha de hoy
Date utilDate = new Date();
SimpleDateFormat dfYYYYMMDD = new SimpleDateFormat("yyyyMMdd");
String strFecha = (String) dfYYYYMMDD.format(utilDate);
dc.ExecSql("SET ARITHABORT ON");
//Obtenemos los nss a procesar
String strSQL = "Select NSS,EDAD_NSS,EDAD_CURP,SEXO from DATOSGENERALES " +
" Where EDAD_NSS IS NULL";
try{
fichero = new FileWriter(path +"DGLog"+".txt",true);
pw = new PrintWriter(fichero,true);
pw.println("Obtenemos los registros de la Base de Datos");
ResultSet rs = dc.ExecSql(strSQL);
if(rs!=null){
rs.beforeFirst();
pw.println("Inicia proceso de registros");
while (rs.next()){
conta +=1;
strNss = rs.getString("NSS").trim();
Edad_NSS=0;
Edad_CURP =0;
FechaNss="";
Sexo="";
//Obtenemos las aportaciones
CURP = prc.ObtenerCurp(strNss, dcselec).trim();
/*Obtenemos la edad por NSS*/
int anio = Integer.parseInt(strNss.substring(4, 6));
if(anio < 13){
anio = 2000 + anio;
}else{
anio = 1900 + anio;
}
Edad_NSS = uc.calcularEdad(anio, Integer.parseInt(strFecha.substring(0, 4)));

//Si tiene curp obtenemos la fecha de la curp
if (!CURP.equals("")&& CURP.length()==18 && CURP.matches("\\w*")){
Sexo= CURP.substring(10, 11).trim();
FechaNss = CURP.substring(4, 10).trim();
if (!Sexo.equals("M")&& !Sexo.equals("H")){
Sexo="";
}
if (uc.EsNumerico(FechaNss)){
if(Integer.parseInt(FechaNss.substring(0, 2))<13){
FechaNss = "20"+ FechaNss;
}else{
FechaNss = "19"+ FechaNss;
}
TieneCurp +=1;
Edad_CURP = uc.calcularEdad(FechaNss, strFecha);
}
}
rs.updateInt("EDAD_NSS", Edad_NSS);
rs.updateInt("EDAD_CURP", Edad_CURP);
rs.updateString("SEXO", Sexo);
rs.updateRow();
contReg +=1;
if (contReg==50000){
pw.println("Leidos: "+conta);
pw.println("Total NSS con CURP (Fecha nacimiento válida): " +TieneCurp);
pw.println("Último Nss Procesado: " +strNss);
contReg =0;
}
}
}
}catch(Exception e){
e.printStackTrace();
pw.println("Error NSS: "+strNss + " CURP: " +CURP);
}finally{
dc.closeConnections();
dcselec.closeConnections();
try{
pw.println("Total NSS procesados: " +conta);
pw.println("Total NSS con CURP (Fecha nacimiento válida): " +TieneCurp);
if (null != fichero){
fichero.close();
pw.close();
}
}catch(Exception e){
e.printStackTrace();
}

System.out.println("Total NSS procesados: " +conta);
System.out.println("Total NSS con CURP (Fecha nacimiento válida): " +TieneCurp);
}
}

public String ObtenerCurp(String NumSegSoc,DataBaseConnections dc){
String CURP="";
String strSQL = "Select CURP from APORTACIONES " +
"WHERE NSS = '"+NumSegSoc+"'" +
" AND RTRIM(CURP)!=''";
ResultSet rs = dc.ExecSql(strSQL);
if (rs!=null){
try{
rs.first();
CURP = rs.getString("CURP");
}catch(Exception e){
CURP="";
} finally{
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
return CURP;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como mejorar el proceso de java

Publicado por -.- (13 intervenciones) el 28/10/2009 23:55:26
Wow ,es bastante DATA, por un lado trata de optimizar el gestor de base de datos, indexando , aumentando cache.
Por el lado del procedimiento , te recomiendo que lo pases a Store Procedure, ya que trabajar directamente con el gestor es mucho mas veloz que desde java.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como mejorar el proceso de java

Publicado por Principiante (13 intervenciones) el 03/11/2009 17:16:38
Gracias, me sirvió de mucho tu observación.....

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar