Galera, estou usando HSQLDB para salvar uma carga de registros grande, o problema e que para testar performance criei uma unica tabela dentro do meu banco HSQLDB e comecei a popular com muitos registros, o que notei foi o seguinte:
Na primeira remessa ele inseri tranquilamente 1.000.000 de registros, mas na segunda na hora de inserir mais 1.000.000 ele fica extremamente lento e acaba explodindo a memória heap.
O estranho é que primeiro abro a conexão, persisto 1.000.000 com batch fecho e encerro a aplicação, ai inicio a aplicação novamente, no momento em que ele vai criar uma conexão com o banco tudo ja fica mais lento, só para abrir a conexão ja demora mais de 30 segundos.
As duvidas são:
O java carrega esse banco em memoria como se estivesse lendo um arquivo?
O HSQLDB não suporta muitos resgistros tipo, acima de 1.000.000?
Então… se você não configurar corretamente a base do HSQLDB, ele só usa o arquivo em duas ocasiões: quando lê o arquivo em memória, e quando você sai da sua aplicação e os dados são gravados da memória para o disco.
Mesmo configurando o Cache e nio ao incluir mais de 1.500.000 de registros em uma tabela a memoria heap explode, parece que ele carrega o arquivo inteiro em memoria.
Fiz o mesmo teste com derby, ele parece ser bem mais lento…para persistir o primeiro milhão ele demorou muito mais que o hsqldb…mas vou tentar ir com mais força em cima do derby