Senhores,
tenho um programa que lê um arquivo texto (tamanho médio 20Mb), que faz um parse desse arquivo e insere os dados em um banco mysql (com todas as tabelas no formato myisam e a maioria com registro de tamanho fixo).
O procedimento de carga leva em média 100ms.
O parse leva em média 120ms.
A carga do banco está levando em média 26 minutos.
Sendo que se eu gerar um arquivo com os comandos insert e roda no console (mysql) a carga não leva dois minutos :evil:
a unidade de persistência, os controladores e as classe de entidades foram todas criadas automaticamente pelo netbeans.
Exemplos:
persistence.xml (removi as demais referências de class para simplificar)<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="GenbankFile2DBPU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<class>br.ufpr.bioinfo.genbank.db.Anotacao</class>
<class>br.ufpr.bioinfo.genbank.db.Genes</class>
<properties>
<property name="toplink.jdbc.user" value="genomas"/>
<property name="toplink.jdbc.password" value="*****"/>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/genomas"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>
</persistence-unit>
</persistence>
@Entity
@Table(name = "genes", catalog = "genomas", schema = "")
@NamedQueries({@NamedQuery(name = "Genes.findAll", query = "SELECT g FROM Genes g"), @NamedQuery(name = "Genes.findById", query = "SELECT g FROM Genes g WHERE g.id = :id"), @NamedQuery(name = "Genes.findByNome", query = "SELECT g FROM Genes g WHERE upper(g.nome) = upper(:nome)"), @NamedQuery(name = "Genes.findByLocusTag", query = "SELECT g FROM Genes g WHERE g.locusTag = :locusTag")})
public class Genes implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id", nullable = false)
private Integer id;
@Basic(optional = false)
@Column(name = "nome", nullable = false, length = 200)
private String nome;
@Basic(optional = false)
@Column(name = "locus_tag", nullable = false, length = 50)
private String locusTag;
public Genes() {
}
// métodos gets/sets/equals e hash omitidos
}
public class GenesJpaController {
public GenesJpaController() {
emf = Persistence.createEntityManagerFactory("GenbankFile2DBPU");
}
private EntityManagerFactory emf = null;
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void create(Genes genes) throws PreexistingEntityException, Exception {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.persist(genes);
em.getTransaction().commit();
} catch (Exception ex) {
if (findGenes(genes.getId()) != null) {
throw new PreexistingEntityException("Genes " + genes + " already exists.", ex);
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}
// demais métodos omitidos por não estarem sendo utilizados...
}
Alguém tem alguma sugestão?
vw
Ps: versões:
Java 6u17
Netbeans: 6.7.1
Mysql: 5.1.36