# Java > Gnral Java > Persistance des donnes >  hibernate et JPA toplink

## ib1606

Bonjour la communaut,

Je suis entrain de tester hibernate et topLink en stage, je voudrais avoir des chiffres de performance de ces 2 technos. J'ai une simple table track(int id, int x, int y, DateTime date) sous MySQL5. Pour faire un update de 1000 lignes je met entre 218ms et 234 ms avec toplink et 340 ms avec hibernate. J'utilise une machine pas mal, 8 coeurs et j'ai mis mon HeapSpace  1024M. Ces chiffres me paraissent pas raisonnables, quand pensez-vous? Quelqu'un peut-il me dire quels seraient les meilleurs rsultats qu'on puisse esprer. Ci-dessous ma mthode lente version topLink:


```

```

remarque: le flush par paquet augmente le temps d'excution: bizarre.

Merci d'avance.

----------


## fr1man

Il faut aussi parametrer la proprit (sous Hibernate) :


```

```

La valeur de la proprit doit tre en rapport avec le nombre d'lments que tu veux flusher (100 dans ton code).
Il me semble que la valeur max conseille est de 35 ou quelque chose comme a.
Va voir la doc, il y a un chapitre l dessus.

----------


## ib1606

Merci pour ta rponse j'ai mis mon batch  20 et je fais du flush et clear par paquet de 20 comme l'indique la doc d'hibernate, mais je passe de 340ms  375ms, je comprends pas pour cette optimisation a un effet ngatif. Par ailleurs t'aurait pas une ide des performances qu'on peut esprer avec toplink pour modifier 1000 lignes. Ci-dessous les properties de mon fichier de config:



> <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
>     <property name="hibernate.batch_size">20</property> 
>         <property name="hibernate.cache.use_second_level_cache">false</property>
>     <property name="org.hibernate.flushMode">MANUAL</property>
>     <property name="hibernate.show_sql">true</property>
>         <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
>     <property name="current_session_context_class">thread</property>


Merci encore.

----------


## fr1man

Cela te semble trop lent ?

Et si tu modifies ces lignes directement en SQL  partir d'un outil comme toad ou autre, les temps sont ils beaucoup plus rapides ?

----------


## ib1606

Merci pour la rponse, en effet je trouve que c'est lent puisque j'ai ecris une procdure stocke (sous mysql 5) qui modifie les 1000 lignes de la table, et le temps d'excution est 0.00 seconde sur le terminal de MySQL, je sais pas comment afficher les autres dcimales (ou le rsultat en ms, si quelqu'un sait je veux bien savoir aussi), en tout cas au pire a fait 0.009 secondes soit 9ms << 340 ms je trouve. Aussi j'ai bien vrifier que modifier 1000 tracks de mon arrayList met 0 ms c'est donc le temps de sauvegarde dans la BD qui est long.

----------


## fr1man

Il faut bien voir que l'utilisation d'un ORM (hibernate, toplink ou autre) implique un surcout.
Si tu as bien lu la doc et le chapitre 13 concernant le traitement par paquet, je ne pense pas que tu puisses faire beaucoup mieux.

Tu peux toujours essayer d'crire du JDBC pur ou tout du moins une requete SQL via Hibernate pour tes mises  jour pour voir ce que cela donne.

----------

