Uma dúvida: Tenho uma planilha imensa (126000 linhas) para importar para o banco, imaginem uma planilha de dados cadastrais, com nome, rg, cpf, etc…
Eu estou fazendo um foreach, varrendo cada linha da planilha, gerando um objeto com os dados daquela linha (por exemplo Pessoa), e persistindo no banco usando Hibernate.
O que percebo? As primeiras 1000 linhas demoram cerca de 20s para serem persistidas, quando chego na linha 6000 por exemplo, o mesmo milheiro demora cerca de 3 minutos. Fico imaginando quanto tempo demorará para terminar as 126000. E se fosse uma planilha com 500000 linhas? hehe
Como vocês fazem nesses casos? Acho que a forma como estou fazendo não é a mais adequada! Mas de certa forma, é melhor persistir objetos determinados do que apenas Strings… Bem, o que me sugerem para não perder tanto em desempenho como está ocorrendo?
Se for uma inserção eventual, tenta utilizar alguma ferramenta para importar diretamente no banco de dados. Na pior das hipóteses, escreve uma query nativa ao invés de criar 126000 objetos…
Cara recentemente precisei fazer algo parecido, vim aqui no fórum e segui as dicas do Viny, que era usar o executeBatch(), onde no meu caso eu armazeno os registros à serem inseridos em pacotes de 100, para evitar sobrecarga no banco, e conseguir uma performance melhor, mais a quantidade depende da sua necessidade.
Segue exemplo do uso deste:
Uma dúvida: Tenho uma planilha imensa (126000 linhas) para importar para o banco, imaginem uma planilha de dados cadastrais, com nome, rg, cpf, etc…
Eu estou fazendo um foreach, varrendo cada linha da planilha, gerando um objeto com os dados daquela linha (por exemplo Pessoa), e persistindo no banco usando Hibernate.
O que percebo? As primeiras 1000 linhas demoram cerca de 20s para serem persistidas, quando chego na linha 6000 por exemplo, o mesmo milheiro demora cerca de 3 minutos. Fico imaginando quanto tempo demorará para terminar as 126000. E se fosse uma planilha com 500000 linhas? hehe
Como vocês fazem nesses casos? Acho que a forma como estou fazendo não é a mais adequada! Mas de certa forma, é melhor persistir objetos determinados do que apenas Strings… Bem, o que me sugerem para não perder tanto em desempenho como está ocorrendo?
Abraços
[/quote]
Olá, este tópico tem relação com sua duvida, quem sabe pode ajudar.
Cara tem uma ferramenta open source da Pentaho. O nome dela é Kettle.
Não precisa instalar é só fazer download e executar tipo o eclipse.
A hora que abrir você cria uma nova transformação arrasta a entrada como um arquivo de excel e a saida como uma tabela de banco de dados, configura a conexão e manda rodar.
Eu uso isso aqui pra fazer importação de uma base de dados para outra… e olha que tem tabelas bem grandinhas… com mais de 10 milhões de registros.
Essa na verdade é uma ferramenta de ETL então é bem completa pra esse tipo de coisa.