Dúvida Hibernate - Otimização de inserts no DB

4 respostas
bsl.lacerda

Olá pessoal!
Estou utilizando o Hibernate 3.2 em um projeto e gostaria de saber se tem uma forma de otimizar a inserção de mais de 1 milhão de registros importados de um arquivo csv.

O processo atual leva mais de 20 minutos para ser concluído.

Andei dando uma olhada em Batch Processing http://www.hibernate.org/hib_docs/reference/en/html/batch.html mas acho que não é bem isso que eu preciso para otimizar este processo.

Alguem poderia me dar uma luz?

Valeu!

4 Respostas

pissurno

Estou com um problema de performanse semelhante… vc consegui otimizar de alguma forma?

bsl.lacerda

Olá amigo!

Pelo que eu me lembre, o que eu fiz foi dar flush na sessão do Hibernate conforme uma certa quantidade de registros tivesse sido persistida, No meu caso a cada 20 registros se não me engano.

O código era mais ou menos assim (Vou usar list mas no seu caso vc vai iterar no arquivo csv):

int count = 0;
List<LinhaDoArquivo> csv = new ArrayList<LinhaDoArquivo>()
for ( int x = 0; x < csv.size(); x++ ) {
  session.persist( csv.get(x) );  
  if ( count % 20 == 0 ) {
    session.flush();
  }
  count ++;
}

Espero ter ajudado.

[]'s

von.juliano

Ao invés de utilizar Session, utilize StatelessSession.

Blz? Flw! :thumbup:

pissurno

Obrigado a todos…
implementei a estratégia de batch insert usando flush e clear a cada 1000 registros… estou pensando em fazer um teste usando StatelessSession tb.
Só não sei ao certo ainda como usar StatelessSession em EJB que é o meu caso.

Criado 8 de abril de 2008
Ultima resposta 24 de jul. de 2011
Respostas 4
Participantes 3