Bonjour,
Je suis en train de protoyper une appli qui persiste un objet Java dans une base de donnée relationnel via JPA (EclipseLink).
L'idée est de mesurer les performances pour un grand nombre d'insertion à la suite (environ 300000 voir plus)
Voici un le code en question :
Ce code explose ma java heap memory.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 for (int i = 0; i <300000; i++) { if(!em.isOpen()){ em = factory.createEntityManager(); //On utilise un EntityManager par batch (cf la doc EclipseLink sur l'optimisation des écritures em.getTransaction().begin(); } Person person = new Person(); person.setFirstName("Jim_" + i); person.setLastName("Knopf_" + i); em.persist(person); person = null; if(i%10000 == 0){ //Commit toutes les 10 000 insertions em.getTransaction().commit(); em.close(); } }
Existe-t-il des méthodes (des patterns) pour faire ce genre manipulation avec JPA le plus efficacement possible ?
Pour info : j'ai un second proto 100% JDBC qui éxécute cet insertion en environ 6-7s sur ma machine (avec SQLite). Puis-je espérer obtenir des performances se rapprochant (disons environ 10-15s) avec une solution à base de JPA ?
Cordialement
Partager