Bom, antes de postar o código, queria deixar claro meu cenário.
Eu tenho um CSV com milhões de registros (aproximadamente 40 milhões) e preciso fazer algumas operações com eles para que eu possa gerar um enorme relatório.
fiz um código que atende minha necessidade, leio o csv e salvo em um BD, apartir dai faço os devidos procedimentos…
porém meu código demora em media 30 min para ler 1 milhão de registros ( para ler os 40 milhões isso iria levar horas !). Queria saber se tem como otimizar mais o código abaixo ou se a unica maneira seria comprar um PC da NASA para fazer o trabalho kkkkkkk
[code]package com.util;
import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Time;
import com.facade.FacadeConsulta;
import com.model.Consulta;
public class ManipulaArquivo {
private static final String CAMINHO = “teste.txt”;
public void lerArquivo() {
try {
FileReader reader = new FileReader(CAMINHO);
BufferedReader leitor = new BufferedReader(reader, 1 * 512 * 512);
String linha = null;
FacadeConsulta salvadorDeConsultas = new FacadeConsulta();
leitor.readLine();
salvadorDeConsultas.abreConexao();
while ((linha = leitor.readLine()) != null) {
String campos[] = linha.split(";", linha.length());
Consulta objConsulta = new Consulta();
objConsulta.setBilhetador(campos[0]);
objConsulta.setOrigem(campos[1]); //Pulando uma coluna
objConsulta.setDestino(campos[3]); //Pulando uma coluna
objConsulta.setRotaEntrada(campos[5]);
objConsulta.setRotaSaida(campos[6]);
objConsulta.setFds(campos[7]);
objConsulta.setDataHora(campos[8]);
objConsulta.setTtc(campos[9]);
salvadorDeConsultas.salvaConsulta(objConsulta);
//Bloco gerado para fugir do erro de "heap space" do hibernate
if(contLinha >= 190000){
salvadorDeConsultas.commitAndCloseTransaction();
salvadorDeConsultas.abreConexao();
}
}
salvadorDeConsultas.fechaConexao();
} catch (Exception e) {
throw new RuntimeException("Não foi possível ler o arquivo!", e);
}
}
}[/code]